int pre[Maxn];
int find(int x){
if(pre[x] == x)return x;
return pre[x] = find(pre[x]);
}
每次更新树的祖先 提高今后查找效率
int find(int x){
if(pre[x] == x)return x;
else{
pre[x] = find(pre[x]);
return pre[x];
}
}
并查集的查找
//并查集的初始化
void init(){
for(int i = 1; i <= n; i++){
pre[i] = i;
}
return;
}
//并查集的合并
void mage(int x, int y){
int fx = find(x);
int fy = find(y);
if(fx != fy){
pre[fy] = fx;
}
}
//判 是否在同一集合内
int same(int x, int y){
return find(x) == find(y);
}
//不同集合种类
int sum(){
int sum = 0;
for(int i = 1; i <= n; i++){
if(pre[i] == i)sum++;
}
return sum;
}