#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int per[1100];//各个点自身是一个集合
/*
发现问题:
测试数据:
4
1 2
2 3
3 4
1 4
得出的结果是per[1]=3,per[2]=4,per[3]=4,per[4]=4
所以吧,在数据较少的时候路径压缩的作用不是太大
数据较大的时候还是比较有用的
害的我以为自己错了呢,看了半天,醉了
*/
int find(int x)//查找根
{
int t=x;
while(per[t]!=t)
{
t=per[t];
}// t保存的是根
int d=x;
int j;
while(per[d]!=t)//路径压缩
{
j=per[d];
per[d]=per[j];
d=j;
}
}
/*int find(int x)
{
return x==per[x]?x:(per[x]=find(per[x]));
}*/
int merge(int a,int b)//合并
{
int fx=find(a);
int fy=find(b);
if(fx!=fy)
{
per[fx]=fy;
}
return 0;
}
int main()
{
int n;
int i;
int u,v;
for(i=0;i<=1000;i++)
per[i]=i;
cin>>n;
for(i=1;i<=n;i++)
{
cin>>u>>v;
merge(u,v);
}
for(i=1;i<=4;i++)
{
cout<<per[i]<<endl;
}
/*while(cin>>a>>b)
{
if(per[a]==per[b])
cout<<"同属一个集合"<<endl;
else
cout<<"不同属一个集合"<<endl;
}*/
return 0;
}
10-12
1920
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
07-18
07-18
07-18
07-18
07-18
07-18
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交