虽然我看不懂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