并查集模板 836合并集合
作者:
zplzh
,
2024-03-09 10:57:38
,
所有人可见
,
阅读 20
#include <iostream>
#include <algorithm>
#include <queue>
using namespace std;
const int N = 100010;
int f[N],n,m;
// 查找祖先
int find(int x){
if(x==f[x]) return f[x];
else return f[x]=find(f[x]);
}
// 和并祖先
void un(int x,int y){
int x1 = find(x);
int y1 = find(y);
f[x1]=y1;
}
int main(){
cin>>n>>m;
//初始化祖先
for(int i = 0;i<n;i++){
f[i] = i;
}
while(m--){
char op[2];
int a,b;
cin>>op>>a>>b;
if(op[0]=='M'){
if(find(a)==find(b)) continue;
else un(a,b);
}else{
if(find(a)==find(b)){
puts("Yes");
}else puts("No");
}
}
return 0;
}