题目大意:某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇。
省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可)。
问最少还需要建设多少条道路?
代码:
#include<cstdio>
include<iostream>
using namespace std;
int father[1005];
int find(int x)
{
return x==father[x]?x:father[x]=find(father[x]);
}
void merge(int x,int y)
{
int f1=find(x);
int f2=find(y);
if(f1!=f2)
{
father[f2]=f1;
}
}
int main()
{
int n,m,a,b;
while(scanf("%d%d",&n,&m)!=EOF && n)
{
for(int i = 1 ; i <=n ; i++ )
father[i] = i ;
int k=0;
for(i = 0 ; i < m ; i++ )
{
cin>>a>>b;
merge(a,b);
}
for(i=1 ; i <= n ; i++)
if(father[i]==i)
k++;
cout<<k-1<<endl; }
return 0 ;
}