@[czk111](/user/682044)
```cpp
#include <bits/stdc++.h>
using namespace std;
int n,m;
int f[200010];
int find(int a){
if(f[a]==a)return a;
return f[a]=find(f[a]);
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
f[i]=i;
}
while(m--){
int t,a,b;
cin>>t>>a>>b;
if(t==1){
f[find(a)]=find(b);
}else{
if(find(a)==find(b)) cout<<"Y"<<endl;
else cout<<"N"<<endl;
}
}
}
```
by w9095 @ 2023-01-31 19:28:44
@[czk111](/user/682044) 问题出在这一行
```cpp
f[find(a)]=b;
```
你的b也需要执行find,保证是b的祖先进行合并
by w9095 @ 2023-01-31 19:29:44
@[czk111](/user/682044) 建议写按秩合并
by __er @ 2023-01-31 19:45:07