问题描述如下:
“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可)。问最少还需要建设多少条道路?
城镇数码N,道路数目M;
简单的畅通工程,只要套模板就OK 。不过要理解哦。。。(若有N个集合,则最少只需N-1条道路就可以连起来)
#include"stdio.h"
int set[1024];
int find(int i)
{
return set[i]==i?set[i]:find(set[i]);
}
void merge(int x,int y)
{
int a=find(x),b=find(y);
set[a]=b;
}
int main()
{
int N,M,a,b;
while(scanf("%d %d",&N,&M)!=EOF&&N)
{
for(int i=1;i<=N;++i)
set[i]=i;
for(int i=1;i<=M;++i)
{
scanf("%d%d",&a,&b);
merge(a,b);
}
int c=0;
for(int i=1;i<=N;++i)
if(set[i]==i)
++c;
printf("%d\n",c-1);
}
return 0;
}