合并:
路径压缩:
#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");elseputs("No");}}return 0;}