AcWing 836. 合并集合
原题链接
简单
#include<iostream>
#include <algorithm>
#include <cstring>
#include<queue>
#include<cmath>
using namespace std;
const int N=100010;
int p[N];
int find(int x)
{
if(x!=p[x]) p[x]=find(p[x]);//如果x的父节点不是本身,说明他不是祖宗节点
return p[x];//返回祖宗节点
}
int main()
{
int n,m;
cin>>n>>m;
for(int i=0;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);//随便把一个集合接到另外一个集合上面,让a的祖宗认个die就行hh
else
{
if(find(a)==find(b))
puts("Yes");
else
puts("No");
}
}
return 0;
}