20分求助

P3367 【模板】并查集

@[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


|