只是再自己打一遍熟悉一些
#include<iostream>
#include<cstdio>
using namespace std;
#define tcl(a,b,c) for(a=b;a<=c;a++)
int f[100001];
int get(int x)
{if(f[x]==x)return x;else {f[x]=get(f[x]);return f[x];}
}
void join(int a,int b)
{int t1,t2;t1=get(a);t2=get(b);//这里不能直接赋值不知道为什么..if(t1!=t2)f[t2]=t1;return;
}
void find(int a,int b)
{int t1,t2;t1=get(a);t2=get(b);if(t1==t2) {printf("Y\n");return;}printf("N\n");
}
int main()
{int n,m,i,t,a,b;scanf("%d%d",&n,&m);tcl(i,1,n) f[i]=i;tcl(i,1,m){scanf("%d%d%d",&t,&a,&b);if(t==1) {join(a,b);}else{find(a,b);}}return 0;
}