循环+路径压缩
int n,m,z,x,y,fa[10005];
int find(int x)
{
if (x==fa[x]) return x;
return fa[x]=find(fa[x]);
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;++i)
fa[i]=i;
while(m--)
{
cin>>z>>x>>y;
int a=find(x),b=find(y); //ab分别去找自己的爹
if(z==1) fa[a]=b; //并查集的合并操作,及将x点祖先的爹记为y点的祖先
if(z==2)
{
if(a==b) cout<<'Y'<<endl;
else cout<<'N'<<endl;
}
}
return 0;
}