并查集有两点:
1.p[N]数组,p[i]表示i的父节点,如果p[i]==i那就是根节点
2.查找压缩算法
int find(int x)返回x根节点并把路径上点都连接根节点
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
int n,m;
int p[N];//p[i]是i的父节点
int find(int x)//find返回x的根 查找和压缩一起做
{
if(p[x]!=x) p[x]=find(p[x]);//如果不是根
return p[x];
}
int main()
{
cin>>n>>m;
for(int i=1; i<=n;i++)
{
p[i]=i;
}
while(m--)
{
string s;
int a,b;
cin>>s>>a>>b;
if(s == "M")
{
p[find(a)] = find(b);
}
else
{
if(find(a) == find(b))
{
cout<<"Yes"<<endl;
}
else
{
cout<<"No"<<endl;
}
}
}
return 0;
}