#include<iostream>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>
#include<queue>
#include<vector>
using namespace std;
#define maxn 200005
int a1,a2,a3,f[maxn],n,m;
int getf(int o){ //找祖宗
if (f[o]==o)return o;
else return f[o]=getf(f[o]);//路径压缩
}
void merge(int v,int u){ //合并子集
int t1,t2;
t1=getf(v);
t2=getf(u);
if(t1!=t2)f[t2]=t1;
return;
}
void find(int v,int u) {
int t1,t2;
t1=getf(v);
t2=getf(u);
if (t1==t2)printf("Y\n");
else printf("N\n");
}
int main(){
scanf("%d %d",&n,&m);
for(int i=1;i<=n;i++)
f[i]=i;
for(int i=1;i<=m;i++){
scanf("%d %d %d",&a1,&a2,&a3);
if(a1==1) merge(a2,a3);
else find(a2,a3);
}
return 0;
}
并查集
最新推荐文章于 2025-03-28 00:17:31 发布