![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
并查集
文章平均质量分 61
Matrix1254
爱代码,爱加班,爱咖啡可乐
爱挑战,爱钻研,爱打游戏
爱晚起,也爱工作到深夜。
我擅长技术,崇尚简单和懒惰
我神秘而孤僻,沉默而爱憎分明
我行我素,我是程序员
展开
-
hdu 1856 More is better (究级版)
简单题,列出最大集合所含元素个数即可。要用带路径压缩的并查集,不然会TLE。另外,要注意当n为0时,要输出1. 题目有说: or there is only one boy left. 可能有100000个男孩,但都没配对,答案是1。 AC代码: #include using namespace std; #define NUM 10000005 int set[NUM]; int a原创 2013-02-09 16:28:19 · 411 阅读 · 0 评论 -
hdu 1233 还是畅通工程
题目实质是求最小生成树,用Kruskal算法。 一、把原始图的N个节点看成N个独立子图; 二、每次选取当前最短的边(前提操作是?),看两端是否属于不同的子图;若是,加入;否则,放弃; 三、循环操作该步骤二,直到有N-1条边; AC代码: #include #include #include #define NUM 10005 int set[NUM]; struct point {原创 2013-02-09 20:43:06 · 511 阅读 · 0 评论 -
hdu 1325 Is It A Tree?
跟小希的迷宫基本一样,只是此题是有向图,要注意:1无环 2 只有一个入度为0的结点(根结点),不存在入度大于1的结点。输入结束条件是两个负数,而不是-1,不然会TLE。1 1 0 0 经证明,无此数据,不论是true或false,都可AC。 AC代码: #include #define NUM 100005 int set[NUM]; int visit[NUM]; int lu[NUM];原创 2013-02-08 11:43:23 · 431 阅读 · 0 评论 -
hdu 1232 畅通工程
极简单的水题,求集合个数-1即可。初始化cnt为n,,每当要合并的时候,就把cnt--。最后输出cnt-1。 AC代码: #include #define NUM 1005 int set[NUM]; int n; void init() { for(int i=0;i<=n;i++){ set[i]=i; } } int find(int x) { in原创 2013-02-09 17:21:59 · 362 阅读 · 0 评论 -
hdu 1213 How Many Tables
简单并查集,求出并查集的个数。一句话:尽信书,不如无书。凡事要自己思考。merge时都是把双方的根结点来merge。里面的函数均是正确的。 AC代码: #include #include int n,m,res; #define NUM 1005 int set[NUM]; int find(int x) { return set[x]; } void merge(int a, int原创 2013-02-07 17:53:40 · 333 阅读 · 0 评论 -
hdu 1272 小希的迷宫
题目实质是判断是否为连通的无回路的图。用简单并查集做,只是要注意以下三点: 1、读入过程中,合并集合的时候,如果,当前读入的两个元素属于同一个集合,那么肯定是No~; 2、不要忘了最后要判断所有的点都要是连通的哦~不能有孤立的;(这个很关键,之前没考虑到这点一直WA) 3、读入只有0 0的时候,要输出Yes。。。 有人说要考虑点数是否是边数+1来判断回路,其实是不正确的。1 1 0原创 2013-02-07 22:35:15 · 432 阅读 · 0 评论 -
hdu 1875 畅通工程再续
与之前的畅通工程类似,求最小生成树,只是要剔除不符合条件的边,还要判断是否是连通图(这个磨蹭了很长时间,只要判断加入集合的点数与题目给出的点数是否相等即可)。 #include #include #include #define NUM 103 using namespace std; struct point { int x; int y; }pos[NUM];原创 2013-02-15 18:58:54 · 468 阅读 · 0 评论 -
hdu 1879 继续畅通工程
跟前几题畅通工程类似,求最小生成树。当状态是已修建时,直接merge。值得注意的是得用scanf,用cin会超时。还得用路径压缩的并查集,不然也会TLE。 #include #include using namespace std;//20:07 #define NUM 102 struct points { int start; int end; int w;原创 2013-02-15 20:28:29 · 404 阅读 · 0 评论 -
hdu 1102 Constructing Roads
跟之前的继续畅通工程几乎一模一样,只是输入换一下。map[i][j]!=0时,才将其做为一条边,否则不加入。 #include #include using namespace std; #define NUM 105 struct points { int start; int end; int w; }pos[10005]; int set[NUM]; int原创 2013-02-15 20:54:26 · 349 阅读 · 0 评论