http://poj.org/problem?id=2524
跟hdu-1213 一样,首先有n个人,然后有m个关系,问属于不同关系的人有多少个。
#include
int id[50001],sz[50001],n,m;
int find(int p)
{
while(p!=id[p])
{ // 路径压缩,会破坏掉当前节点的父节点的尺寸信息,因为压缩后,当前节点的父节...
分类:
其他好文 时间:
2014-08-24 14:15:42
阅读次数:
232
题意:有编号为1~N的N个小木块,有两种操作M x y 将木块x所在的堆放到木块y所在的堆的上面C x 询问木块x下面有多少块木块代码巧妙就巧妙在GetParent函数中在进行路径压缩的同时,也计算好了该木块对应的under值这个需要好好体会 1 //#define LOCAL 2 #include...
分类:
其他好文 时间:
2014-08-24 10:13:22
阅读次数:
168
第一道并查集,听起来很高大上的样子,其实也不难理解我感觉并查集的精髓就在那个路径压缩上面,将叶子节点直接指向根并:将两个集合合并在一起查:查询某个元素是否在该集合中题意:已知0号同学染病了,那么和他同在一个集合的同学也都可能染病了,输出可能染病的总人数标准的并查集,模板题 1 //#define L...
分类:
其他好文 时间:
2014-08-23 22:51:41
阅读次数:
253
Segment setTime Limit: 3000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3457Accepted Submission(s): 1290Problem...
分类:
其他好文 时间:
2014-08-23 00:59:49
阅读次数:
322
1 /* 2 题目大意:有两个不同的黑帮,开始的时候不清楚每个人是属于哪个的! 3 执行两个操作 4 A a, b回答a, b两个人是否在同一帮派,或者不确定 5 D a, b表示a, b两个人不在同一个帮派 6 7 思路:利用并查集将相同帮派的人合并到一起! 8 ...
分类:
其他好文 时间:
2014-08-05 18:48:29
阅读次数:
197
这里的思路是 在每一次的找父亲节点的时候我们把每一个孩子的父亲的改成他的祖先。因为有可能一个孩子的关系很复杂可能就是一条链,这样查找就没浪费时间。//这是简单的递归实现find (int x){ while(x!=father[x]) father[x] = find(father[x]) ; r....
分类:
其他好文 时间:
2014-07-31 09:38:15
阅读次数:
205
题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=1213典型的并查集,属于水题吧,但学会了路径压缩。 1 /*非递归,非路径压缩*/ 2 #include 3 const int maxn=1000+5; 4 int fa[maxn]; 5 void i...
分类:
其他好文 时间:
2014-07-29 20:58:42
阅读次数:
217
在上面一讲是并查集(1)-判断无向图是否存在环. 我们使用了并查集的两个操作:union()和find()// find 的原始实现int find(int parent[], int i){ if (parent[i] == -1) return i; return f...
分类:
其他好文 时间:
2014-07-29 10:57:16
阅读次数:
266
题目来源:POJ 1984 Navigation Nightmare
题意:给你一颗树 k次询问 求2点之间的曼哈顿距离 并且要在只有开始k条边的情况下
思路:按照方向 我是以左上角为根 左上角为原点 dx[i]为i点距离根的x坐标 dy[]是y坐标 这两个可以通过路径压缩求出 只不过是二维而已
#include
#include
#include
using namespace st...
分类:
Web程序 时间:
2014-07-26 17:19:52
阅读次数:
358
裸并查集,但有二坑:1.需要路径压缩,不写的话会TLE2.根据题目大意,如果0组男孩合作的话,应该最大的子集元素数目为1.所以res初始化为1即可。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #...
分类:
其他好文 时间:
2014-07-22 23:12:12
阅读次数:
210