随笔分类 -  并查集

hud 畅通工程 1232
摘要:Problem Description某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇。省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可)。问最少还需要建设多少条道路? Input测试输入包含若干测试用例。每个测试用例的第1行给出两个正整数,分别是城镇数目N ( < 1000 )和道路数目M;随后的M行对应M条道路,每行给出一对正整数,分别是该条道路直接连通的两个城镇的编号。为简单起见,城镇从1到N编号。 注意:两个城市之间可以有多条道路相通,也就是说3 31 21 22 1这种输入也是合法 阅读全文
posted @ 2011-07-29 10:53 Raffaello 阅读(259) 评论(0) 推荐(0)
最小生成树 hdu 1233 还是畅通工程
摘要:Problem Description某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离。省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可),并要求铺设的公路总长度为最小。请计算最小的公路总长度。Input测试输入包含若干测试用例。每个测试用例的第1行给出村庄数目N ( < 100 );随后的N(N-1)/2行对应村庄间的距离,每行给出一对正整数,分别是两个村庄的编号,以及此两村庄间的距离。为简单起见,村庄从1到N编号。当N为0时,输入结束,该用例不被处理。Output对每个测试用例,在1行里输出最小的公路总 阅读全文
posted @ 2011-07-29 10:53 Raffaello 阅读(375) 评论(0) 推荐(0)
POJ 2524 Ubiquitous Religions
摘要:DescriptionThere are so many different religions in the world today that it is difficult to keep track of them all. You are interested in finding out how many different religions students in your university believe in. You know that there are n students in your university (0 < n <= 50000). It 阅读全文
posted @ 2011-07-29 10:50 Raffaello 阅读(162) 评论(0) 推荐(0)
POJ 1611 The Suspects
摘要:DescriptionSevere acute respiratory syndrome (SARS), an atypical pneumonia of unknown aetiology, was recognized as a global threat in mid-March 2003. To minimize transmission to others, the best strategy is to separate the suspects from others. In the Not-Spreading-Your-Sickness University (NSYSU), 阅读全文
posted @ 2011-07-29 10:49 Raffaello 阅读(124) 评论(0) 推荐(0)
并查集 模板
摘要:三个函数void Make_set(int x){ int i; for(i=0;i<x;i++) { father[i]=i; num[i]=1; }}int Find_set(int x){ if(father[x]!=x) { father[x]=Find_set(father[x]); } return father[x];}void Union(int x,int y){ int a,b; a=Find_set(x); b=Find_set(y); if(a==b) return; if(num[a]>num[b]) { father[b]=a; num[a]+=num[ 阅读全文
posted @ 2011-07-29 10:49 Raffaello 阅读(111) 评论(0) 推荐(0)
并查集 知识点
摘要:并查集学习:l 并查集:(union-find sets)一种简单的用途广泛的集合. 并查集是若干个不相交集合,能够实现较快的合并和判断元素所在集合的操作,应用很多,如其求无向图的连通分量个数等。最完美的应用当属:实现Kruskar算法求最小生成树。l 并查集的精髓(即它的三种操作,结合实现代码模板进行理解):1、Make_Set(x) 把每一个元素初始化为一个集合初始化后每一个元素的父亲节点是它本身,每一个元素的祖先节点也是它本身(也可以根据情况而变)。2、Find_Set(x) 查找一个元素所在的集合查找一个元素所在的集合,其精髓是找到这个元素所在集合的祖先!这个才是并查集判断和合并的最终 阅读全文
posted @ 2011-07-29 10:47 Raffaello 阅读(132) 评论(0) 推荐(0)