这题计算 一张图上 能走的 点对有多少个  对于每个限制边权 , 对每条边排序,对每个查询排序

然后边做克鲁斯卡尔算法 的时候变计算就好了

#include <iostream>
#include <algorithm>
#include <string.h>
#include <cstdio>
#include <vector>
#include <queue>
using namespace std;
const int maxn=;
typedef long long LL;
struct edg{
int a,b,d;
edg(int ca=,int cb=,int cd=)
{
a=ca; b=cb; d=cd;
}
bool operator <(const edg &rhs)const{
return d<rhs.d;
}
}E[];
struct query{
LL id,d;
query(LL cid=, LL cd= ){
id=cid; d=cd;
}
bool operator <(const query &rhs)const {
return d<rhs.d;
}
}Q[];
LL S[maxn];
LL num[maxn];
int fa[maxn];
int fin(int a)
{
return fa[a]=(fa[a]==a)?a:fin(fa[a]);
}
LL ans[];
int main()
{ int cas;
scanf("%d",&cas);
for(int cc=; cc<=cas; cc++)
{
int n,m,q;
scanf("%d%d%d",&n,&m,&q);
for(int i=; i<m; i++)scanf("%d%d%d",&E[i].a,&E[i].b,&E[i].d);
for(int i=; i<=n; i++){fa[i]=i;S[i]=;num[i]=;}
for(int i=; i<q; i++) {scanf("%I64d",&Q[i].d);Q[i].id=i; ans[i]=;}
sort(E,E+m);
sort(Q,Q+q);
int loc=;
LL D=;
for(int i=; i<q; i++)
{
while(loc<m&&E[loc].d<=Q[i].d){
int a=E[loc].a,b=E[loc].b;
a=fin(a);
b=fin(b);
if(a==b){ loc++; continue; }
D=D-S[a]-S[b];
fa[b]=a;
num[a]+=num[b];
S[a]=1LL*num[a]*(num[a]-);
D=D+S[a];
loc++;
}
ans[Q[i].id]=D;
}
for(int i=; i<q; i++)
printf("%I64d\n",ans[i]);
}
return ;
}

hdu5441 并查集+克鲁斯卡尔算法的更多相关文章

  1. PKUACM 2018 D chocolate【并查集+克鲁斯卡尔】

    传送:http://poj.openjudge.cn/practice/C18D/ 依然是课件截图 #include<iostream> #include<cstdio> #i ...

  2. hdu 1233(还是畅通project)(prime算法,克鲁斯卡尔算法)(并查集,最小生成树)

    还是畅通project Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Tota ...

  3. 贪心算法(Greedy Algorithm)之最小生成树 克鲁斯卡尔算法(Kruskal&#39;s algorithm)

    克鲁斯卡尔算法(Kruskal's algorithm)是两个经典的最小生成树算法的较为简单理解的一个.这里面充分体现了贪心算法的精髓.大致的流程能够用一个图来表示.这里的图的选择借用了Wikiped ...

  4. 贪心算法(Greedy Algorithm)最小生成树 克鲁斯卡尔算法(Kruskal&#39;s algorithm)

    克鲁斯卡尔算法(Kruskal's algorithm)它既是古典最低的一个简单的了解生成树算法. 这充分反映了这一点贪心算法的精髓.该方法可以通常的图被表示.图选择这里借用Wikipedia在.非常 ...

  5. 最小生成树之Kruskal(克鲁斯卡尔)算法

    学习最小生成树算法之前我们先来了解下下面这些概念: 树(Tree):如果一个无向连通图中不存在回路,则这种图称为树. 生成树 (Spanning Tree):无向连通图G的一个子图如果是一颗包含G的所 ...

  6. 最小生成树--克鲁斯卡尔算法(Kruskal)

    按照惯例,接下来是本篇目录: $1 什么是最小生成树? $2 什么是克鲁斯卡尔算法? $3 克鲁斯卡尔算法的例题 摘要:本片讲的是最小生成树中的玄学算法--克鲁斯卡尔算法,然后就没有然后了. $1 什 ...

  7. 最小生成树-克鲁斯卡尔算法(kruskal's algorithm)实现

    算法描述 克鲁斯卡尔算法是一种贪心算法,因为它每一步都挑选当前最轻的边而并不知道全局路径的情况. 算法最关键的一个步骤是要判断要加入mst的顶点是否会形成回路,我们可以利用并查集的技术来做. 并查集的 ...

  8. 最小生成树——Kruscal(克鲁斯卡尔算法)

    一.核心思想 ​ 将输入的数据由小到大进行排序,再使用并查集算法(传送门)将每个点连接起来,同时求和. ​ 个人认为这个算法比较偏向暴力,有些题可能会超时. 二.例题 洛谷-P3366 题目地址:ht ...

  9. HDU 1233 还是畅通工程(模板——克鲁斯卡尔算法)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1233 题意描述: 输入n个城镇以及n*(n-1)/2条道路信息 计算并输出将所有城镇连通或者间接连通 ...

随机推荐

  1. 内部排序->交换排序->快速排序

    文字描述  快速排序是对起泡排序的一种改进.它的基本思想是,通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个 ...

  2. Java之旅_高级教程_实例_文件操作

    1.文件写入 import java.io.*; public class MainClass{ public static void main(String[] args){ try{ Buffer ...

  3. mongo 的简单查询语法

    小白的我对MONGO的一些语句搜集用于区别mysql及一些小常识 pymongo 语法按照id进行倒序操作db.news.find().limit(20).sort([("_id" ...

  4. eclipse中tomcat无法加载spring boot

    转自: http://blog.csdn.net/u010797575/article/details/50517777 最近搭建一套spring boot框架,作为 application 启动项目 ...

  5. git 用远程覆盖本地

    git fetch --all git reset --hard origin/master

  6. 重读《深入理解Java虚拟机》五、虚拟机如何执行字节码?程序方法如何被执行?虚拟机执行引擎的工作机制

    Class文件二进制字符流通过类加载器和虚拟机加载到内存(方法区)完成在内存上的布局和初始化后,虚拟机字节码执行引擎就可以执行相关代码实现程序所定义的功能.虚拟机执行引擎执行的对象是方法(均特指非本地 ...

  7. Hibernate 和 MyBatis 的区别

    Hibernate 和 MyBatis 的增.删.查.改,对于业务逻辑层来说大同小异,对于映射层而言 Hibernate 的配置不需要接口和 SQL,相反 MyBatis 是需要的.对于 Hibern ...

  8. 运行Maven工程中修改tomcat端口

    Maven 运行:clean tomcat7:run 若需要修改端口,则用clean -Dmaven.tomcat.port=8082 tomcat7:run

  9. 高性能网络编程7--tcp连接的内存使用

    滑动窗口的工作方式 窗口通知: 发送端维护发送窗口大小(不在包中传输),接收端在ACK中告知接收窗口大小: 发送窗口初始是发送缓冲区大小,接收窗口初始是接收缓冲区大小:缓冲区决定窗口的最大值: 发送窗 ...

  10. 【托业】【新托业TOEIC新题型真题】学习笔记11-题库六-P7

    1.scam [skæm] n.骗局; 诡计; <美俚>诓骗; 故事;vt.欺诈; 诓骗; 2.interpersonal adj.人与人之间的; 人际的; 人与人之间的关系的; 涉及人与 ...