1 并查集
1.1 定义:一种维护集合的数据结构,Union(合并),Find(查找),Set(集合)。
1.2 操作:
- 合并:合并两个集合;
- 查找:判断两个元素是否为在一个集合
1.3 性质
2 操作
2.1 初始化
void Init(int father[], int n){
for (int i = 0; i <= n; ++i)
{
father[i] = i;
}
}
2.2 查找
int findFather(int x){
while(x != father[x]){
x = father[x];
}
return x;
}
int findFather2(int x){
if(x == father[x]) return x;
else return findFather2(father[x]);
}
int findFather3(int x){
inx
while(a != father[a]){
int z = a;
a = father[a];
father[z] = x;
}
return x;
}
int findFather4(int v){
if(v == father[v]) return v;
else{
int F = findFather4(father[v]);
father[v] = F;
return F;
}
}
2.3 合并
void Union(int a, int b){
int faA = findFather(a);
int faB = findFather(b);
if(faA != faB){
father[faA] = faB;
}
}