并查集代码分为3部分:
初始化,找父亲,合并
这是一份并查集的找父亲以及合并的代码:
int getf(int v){
if(f[v] == v) return v;
f[v]=getf(f[v]);
return f[v];
}
void merge(int v,int u){
int t1,t2;
t1=getf(v);
t2=getf(u);
if(t1 != t2) f[t2]=t1;
return;
}
但是这个代码有一个问题:
只有在节点是另一个节点的父亲时,才会去更新它的父亲
所以,当生成一个长度为10的并查集,并执行以下代码时:
merge(1,2);
merge(3,4);
merge(1,3);
并查集是这样的:
1 1 1 3 4 5 6 7 8 9 10