文章目录
void make_set(int x){//建立
p[x]=x;//每个根节点指向自己
rk[x]=0;//记录每个节点的层
}
void find_set(int x){//查找根结点 (查询该集合的代表)
if(p[x]!=x)p[x]=find_set(p[x]);//如果没有到根
return p[x];
}
void uni_set(int x,int y){//合并
x=find_set(x);
y=find_set(y);
if(x!=y){//根不同则合并
if(rk[x]>rk[y]){//将高度小的合并到高的
p[y]=x;
}
else{
p[x]=y;
if(rk[x]=rk[y]);//如果高度相同,高度加1
rk[y]=rk[y]+1;
}
}
}
int ask(int x,int y){//询问是否属于一个集合
x=find_set(x);
y=find_set(y);
if(x==y)return 1;
else return 0;
}