最后三个超了,求解

P3367 【模板】并查集

虽然我看不懂pascal代码。。。 应该是您没有路径压缩。。。 这是我的c++代码,给您参考一下吧。。。 ```cpp #include <bits/stdc++.h> using namespace std; int n,m,f[10005]; int findf(int a){return a==f[a]?a:f[a]=findf(f[a]);} int main() { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++)f[i]=i; for(int i=1,x,y,z;i<=m;i++) { scanf("%d%d%d",&x,&y,&z); if(x==1)f[findf(y)]=findf(z); else findf(y)==findf(z)?printf("Y\n"):printf("N\n"); } return 0; } ```
by XZYQvQ @ 2017-04-14 15:41:43


您好 您应该是这里错了 【倒数第7行】if a<>b then f[a]:=b; 楼上说的没错您没有路径压缩,您只是单纯地进行了一个合并,但是你这样的合并会导致您的集合越来越长,效率越来越差,而如果进行了路径压缩,则您的效率几乎可以达到O(1)【我不知道为什么,据说是玄学】,应该这么改:f[x]:=b;
by Lyrics @ 2017-07-23 15:04:32


|