并查集模板题
贴上我的并查集模板
#include<bits/stdc++.h>
const int N=100010;
int p[N] ;
int find(int x){//返回x的祖宗节点 + 路径压缩
if(p[x]!=x) p[x]=find(p[x]);//如果不是根节点 让父节点等于它的祖宗节点
return p[x] ;//返回祖宗节点
}
int main(){
int n,m;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;++i) p[i]=i;//所有节点的树根是自己
while(m--) {
char op[2];
int a,b;
scanf("%s%d%d",&op,&a,&b);
if(op[0]=='M') p[find(a)]=find(b);//a的祖宗节点的父亲=b的祖宗节点 将a集合并入b集合下
else{
if(find(a)==find(b)) puts("Yes");
else puts("No");
}
}
}