dalao看看按秩合并哪个地方错了~不加按秩合并ac然而现在20分

P3367 【模板】并查集

```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


|