```cpp
#include<cstdio>
int a,b,f[100005],n,m,p,c;
bool flag;
int find(int x)
{
if(x!=f[x])
{
f[x]=find(f[x]);
return f[x];
}
else return x;
}
int main()
{
scanf("%d%d",&n,&p);
for(int i=1;i<=n;i++) f[i]=i;
for(int i=1;i<=p;i++)
{
scanf("%d%d%d",&c,&a,&b);
if(c==1) f[find(a)]=f[find(b)];
else if(c==2)
{
if(find(a)==find(b)) printf("Y\n");
else printf("N\n");
}
}
return 0;
}
这样就可以啊
```
by VenusM1nT @ 2017-10-29 22:21:58
un函数中应该是把r1或r2的father改变再把作为祖先的那个father[r1/2]+=father[r2/1]吧
by Uppk @ 2017-11-01 22:05:06