并查集 试水 hdu1232】的更多相关文章

#include <stdio.h> #include <stdlib.h> int n,m; ],rank[]; int count; int find(int x) { if(father[x]==x) return x; else return father[x]=find(father[x]); } void unit(int x,int y) { x=find(x); y=find(y); if(x==y) return; if(rank[x]<rank[y]){…
在学习并查集之前,首先需要明白基本的并查集可以完成的功能.并查集主要是用于处理不相交集合的合并问题.它是一种基础算法,在离散数学中,可以利用并查集求一个图的连通分支,利用其这个特性可以为我们解决一系列的问题,例如hdu1232"畅通工程"等等.在这里便利用这道题理解并查集的基本知识. 在讲解题目之前,先了解一下并查集.并查集就是将一系列的元素根据题中所给的相关关系,将它们分成一个个互不相交的集合.具体的步骤是分别找到当前的两个元素的代表元素(并查集一般是对两个元素之间的关系进行判断)(…
畅通工程 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 29620    Accepted Submission(s): 15557 Problem Description 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府"畅通工程"的目标是使全省任何两个城镇间都可以实现交通(但不一定有…
D-City Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Total Submission(s): 18    Accepted Submission(s): 15 Problem Description Luxer is a really bad guy. He destroys everything he met. One day Luxer went to D-city…
TM 读错题了...... 我还以为是要动态询问呢,结果是统一处理完了再询问...... 幼儿园题,不解释. Code: #include<bits/stdc++.h> #define maxn 2000002 using namespace std; void setIO(string s) { string in=s+".in"; freopen(in.c_str(),"r",stdin); } int Arr[maxn]; struct Union…
http://poj.org/problem?id=2524 题意:在一所学校里面的人,都有宗教信仰,不过他们的宗教信仰有可能相同有可能不同,但你又不能直接去问他们,但你可以问他们和谁是同一个宗教.通过n次询问,求这个学校最多有多少种宗教信仰. 思路:一个并查集的水题.首先假设这个学校的人全都是不同的信仰.然后再去询问,如果两个人的信仰是相同的,合并这两个人且ans--.最后减出来的ans就是答案. #include <stdio.h> #include <iostream> #i…
tree Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 986    Accepted Submission(s): 452题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5606 Problem Description There is a tree(the tree is a conne…
传送门 这是复习普及组的时候做过的题了. 之前一直觉得很难码没有去做. 现在发现可以用并查集直接水过去. 其实就是把题目中说的连通的部分的面积用带权并查集维护一下就行了. 代码: #include<bits/stdc++.h> using namespace std; inline int read(){ int ans=0; char ch=getchar(); while(!isdigit(ch))ch=getchar(); while(isdigit(ch))ans=(ans<&l…
https://www.luogu.org/problemnew/solution/P1111 并查集的水题,水题都错了好多发. 首先并不是有环就退出,而是连通分支为1才退出,每次合并成功连通分支才会减1. 还有一个bug就是假如没有到达连通分支为1,不应该输出maxt而是要输出-1.所以应该是在cnt==1的情况再更新maxt并break才对. #include<bits/stdc++.h> using namespace std; #define ll long long int n,m;…
城市交通线 Time Limit: 2000/1000ms (Java/Others) Problem Description: A国有n座城市,编号为1~n,这n个城市之间没有任何交通线路,所以不同城市的居民之间不能互通,所以A国的人打算为这n个城市建立k条交通线(两座城市之间可以有两条及以上的线路),交通线只能贯穿两座城市p, q(存在p=q的情况,不用考虑但会占用一条交通线), 建立交通线后两座城市的居民可以互通. 例如:建立1, 4后再建立4, 2,则1和2是互通的(1—>4—>2).…