ACM
文章平均质量分 76
a181551981
这个作者很懒,什么都没留下…
展开
-
POJ1703
<br />#include<iostream>#include<string.h>using namespace std;typedef struct n{ int f; int rel;}node;node f[100010];int findp(int x){ int root; int tmp_f=f[x].f; if(x!=f[x].f) { root=findp(tmp_f); f[x].f原创 2011-03-27 21:21:00 · 540 阅读 · 0 评论 -
POJ1182 食物链————并查集
<br />#include<iostream>#include<string.h>typedef struct n{ int f; int rel;}node;node data[50010];int K,N;int findp(int x){ int tmp_p=data[x].f; if(tmp_p!=x) { int root=findp(tmp_p); data[x].f=root;原创 2011-03-28 00:40:00 · 515 阅读 · 0 评论 -
hdoj 2473 Junk-Mail Filter 并查集的删除
<br />并查集的删除<br />删除当前节点,准确的说是从当前节点集合中剔除当前节点,它的子节点不要动。普通的并查集在合并的时候有些节点是有字节点的,如果删除了这个节点的关系(把它的父亲设置为自己),那么当它的子节点合并的时候就找不到父亲了。解决的方法有两种:(很直接的)遍历所有的节点,findp(x),归并到根,显然不可能,或者在插入的时候,每一个节点都是叶子节点,那么删除的时候就很方便,不用没有归并到根的子节点了。//保证在删除这个节点之前,它的所有子节点已经归并到根上面了//引入虚拟节点,当合原创 2011-03-29 14:35:00 · 1114 阅读 · 0 评论