代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int findRoot(int m,int *a){
int root=m;
while(a[root]>0){
root=a[root];
}
if(a[m]>0){
a[m]=root;
}
return root;
}
void merge(int m,int n,int *a){
int mRoot=findRoot(m,a);
int nRoot=findRoot(n,a);
a[mRoot]=nRoot;
}
int main(){
int n,m;
scanf("%d %d",&n,&m);
n++;
int a[n];
memset(a,-1,sizeof(a));
int q[m];
int qSize=0;
int z,x,y;
int r1,r2;
for(int i=0;i<m;i++){
scanf("%d %d %d",&z,&x,&y);
if(z==1){
merge(x,y,a);
}
else{
r1=findRoot(x,a);
r2=findRoot(y,a);
if(r1==r2){
printf("Y\n");
}
else{
printf("N\n");
}
}
}
}