include[HTML_REMOVED]
using namespace std;
const int N=100010;
int p[N];//存放父节点的数组
int find(int x)//返回祖宗节点(路径压缩)
{
if(p[x]!=x)//该节点不是祖宗节点
p[x]=find(p[x]);
return p[x];
}
int main()
{
int n,m;
cin >> n >> m;
int a,b;
for(int i=1;i<=n;i++) p[i]=i;//开始在n个集合中,每个节点的父节点都是自己
char op[2];//读入字符也可以用字符串,scanf读入可能会读入空格
while(m–)
{
scanf(“%s%d%d”,op,&a,&b);
if(op[0]==’M’)
p[find(a)]=find(b);//让a的祖宗节点成为b的祖宗节点的孩子节点
else
{
if(find(a)==find(b))//判断a结点和b结点的祖宗节点是否一致
puts(“Yes”);
else puts(“No”);
}
}
return 0;
}