当前位置:编程学习 > C/C++ >>

hdu 1232 畅通工程(并查集)

某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇。省易做图“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可)。问最少还需要建设多少条道路? 

 

本题只需将联通的村庄联系在一起而已!

 


#include<stdio.h>

 

int pre[1010];


int find(int k)
{
if(k==pre[k])
return k;
pre[k]=find(pre[k]);
return pre[k];
}


int main()
{
int n,m,i,a,b,f1,f2,ans;
while(scanf("%d",&n),n)
{
scanf("%d",&m);
for(i=1;i<=n;i++)
pre[i]=i;
for(i=0;i<m;i++)
{
scanf("%d %d",&a,&b);
f1=find(a);
f2=find(b);
if(f1!=f2)
pre[f1]=f2;
}
ans=0;
for(i=1;i<=n;i++)
if(i==pre[i])
ans++;
printf("%d\n",ans-1);
}
return 0;
}


 

补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,