您的位置:首页 > 其它

ACM第四次练习—1003

2016-06-12 11:09 274 查看
题意:现有城镇道路统计表,表中列出了每条道路直接连通的城镇。目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可)。问最少还需要建设多少条道路?

思路:并查集的应用问题。使用并查集合并操作将全部城镇分为N个集合,每个集合中的城镇相互连通,所以至少需要N-1条道路便可以使N个集合连通。

感想;图这部分也不简单~

代码:#include"stdio.h"

int bin[1002];

int findx(int x)

{
int r=x;
while(bin[r]!=r)
r=bin[r];
return r;

}

void merge(int x,int y)

{
int fx,fy;
fx=findx(x);
fy=findx(y);
if(fx!=fy)
bin[fx]=fy;

}

int main()

{
int n,m,i,x,y,count;
while(scanf("%d",&n),n)
{
for(i=1;i<=n;i++)
bin[i]=i;
for(scanf("%d",&m);m>0;m--)
{
scanf("%d%d",&x,&y);
merge(x,y);
}
for(count=-1,i=1;i<=n;i++)
if(bin[i]==i)
count++;
printf("%d\n",count);
}
return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: