AcWing 836. 合并集合
原题链接
简单
作者:
minux
,
2020-04-23 19:00:07
,
所有人可见
,
阅读 464
#include <bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int n, m;
int FA[N];
// union find set
// 路径压缩优化
int Find(int x){
if(x!=FA[x]) FA[x]=Find(FA[x]);
return FA[x];
}
void Union(int x, int y){
int fx=Find(x);
int fy=Find(y);
if(fx!=fy)
FA[fx]=fy;
}
int main(){
cin.tie(0);
ios::sync_with_stdio(false);
memset(FA, 0x00, sizeof FA);
cin>>n>>m;
for(int i=1; i<=n; ++i) FA[i]=i; // 初始化并查集
string P;
int x, y;
while(m--){
cin>>P>>x>>y;
if(P=="M"){
Union(x, y);
}
else if(P=="Q"){
if(Find(x)==Find(y)) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
}
return 0;
}