题:若干个城市之间有若干条道路,要使所有城市相连通,问最少还需多少条道路
链接:http://acm.hdu.edu.cn/showproblem.php?pid=1232
思路:并查集
代码:
#include <iostream>
#include <cstdio>
using namespace std;
int road[1010];
int FindRoot(int t)
{
while(road[t])
t=road[t];
return t;
}
int main()
{
int n,m;
while(scanf("%d",&n)&&n!=0)
{
scanf("%d",&m);
if(n == 0) break;
for(int i=1; i<=n; i++)
road[i]=0;
for(int i=0; i<m; i++)
{
int a,b,ra,rb;
scanf("%d%d",&a,&b);
ra=FindRoot(a);
rb=FindRoot(b);
if(ra!=rb) road[rb]=ra;
}
int sum=0;
for(int i=1; i<=n; i++)
{
if(road[i]==0)
sum++;
}
printf("%d\n",sum-1);
}
return 0;
}