题目描述
样例
#include <iostream>
using namespace std;
const int N=100010;
int p[N];//存储节点的父节点
int n,m;
int find(int x){//返回节点x的祖宗节点+路径优化
if(x!=p[x]) p[x]=find(p[x]);
return p[x];
}
int main(){
cin>>n>>m;
for(int i=0;i<n;i++) p[i]=i;//刚开始每个结点在一个集合中
while(m--){
char op;
int a,b;
cin>>op;
if(op=='M'){
cin>>a>>b;
if(find(a)==find(b)) continue;
else p[find(a)]=find(b);
}
if(op=='Q'){
cin>>a>>b;
if(find(a)==find(b)) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
}
return 0;
}