并查集的定义
参考算法笔记
代码片
.
#include<bits/stdc++.h>
using namespace std;
//初始化每个结点
for(int i=1;i<=N;i++){
father[i]=i;
}
//查找父结点,非递归写法
int findFather(int x){
while(x!=father[x]){
x=father[x];
}
return x;
}
//查找父结点,递归写法
int findFather(int x){
if(x==father[x]) return x;
else return findFather(father[x]);//需要传入的是父结点
}
//合并,是把两个集合合并成一个集合
void Union(int a,int b){
int faA=findFather(a);
int faB=findFather(b);
if(faA!=faB){
father[faB]=faA;//必须是父结点指向另一个父结点
/*
if(faA!=faB){
father[faA]=faB;
也可以
*/
}
}