合并:
路径压缩:
#includeusing namespace std; const int N=100010; int n,m; int p[N]; //返回x的祖宗节点+路径压缩 //路径压缩:把每个节点都指向它的祖宗节点 int find(int x) { if(p[x]!=x) p[x]=find(p[x]); return p[x]; } int main() { 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); else { if(find(a)==find(b)) puts("Yes"); else puts("No"); } } return 0; }



