摘要: 与1182一个思路 并查集加偏移量 不过比1182好做一些View Code 1 #include 2 int father[100005], r[100005]; 3 void init(int n) 4 { 5 int i; 6 for(i = 1 ; i <= n ; i++) 7 { 8 r[i] = 0; 9 father[i] = i;10 }11 }12 int find(int x)13 {14 if(x!=father[x])15 {16 int pre = father[x]... 阅读全文
posted @ 2012-07-05 22:32 _雨 阅读(202) 评论(0) 推荐(0) 编辑
摘要: 把两个节点的关系转换为对根节点的关系的比较View Code 1 #include <stdio.h> 2 int father[50001] ,r[50001]; 3 void init(int n) 4 { 5 int i; 6 for(i = 1 ; i <= n ; i++) 7 { 8 father[i] = i; 9 r[i] = 0;10 }11 }12 int find(int x)13 {14 if(x == father[x])15 return father[x];16 else17... 阅读全文
posted @ 2012-07-05 20:51 _雨 阅读(196) 评论(0) 推荐(0) 编辑
摘要: http://poj.org/problem?id=1611题意是找出可能携带病毒的人数 就是把有交集的集合合并在一起 答案就是最后0所在集合的人数并查集的一个主要思想就是合并两个不相交集合 在这个题中 也就是不含重复元素 比如 第一个集合中的1,2 就是把1, 2合并起来作为一个集合 同时把num【】更新一下 就是集合中的元素个数 把每个集合中的第一个数作为根节点 这样集合里的所有元素的祖先就是第一个数x如果两个集合没有交集 比如1,2和10 11 12 13 14 15 这两个集合就不会合并 因为只是集合中的元素合并 1和2合并 10和其它的4个数合并 但是要是有交集1,2和0,1 这两个 阅读全文
posted @ 2012-07-05 14:59 _雨 阅读(274) 评论(3) 推荐(0) 编辑