题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1232
题目思路:中文题。。看着就是爽。。标准并查集。如果最后road[a]=a,说明它没有连接上(除了一个),最后减一在输出就是答案。
AC代码:
#include<stdio.h>
int road[1005];
int find(int a)
{
return road[a]==a?a:find(road[a]);
}
void arr(int a,int b)
{
a=find(a);
b=find(b);
road[a]=b;
}
int main()
{
int n,m;
while(1)
{
scanf("%d",&n);
if(n==0)break;
scanf("%d",&m);
int i,a,b;
for(i=1;i<=n;i++)
road[i]=i;
for(i=0;i<m;i++)
{
scanf("%d%d",&a,&b);
arr(a,b);
}
int ans=0;
for(i=1;i<=n;i++)
if(road[i]==i)ans++;
printf("%d\n",ans-1);
}
return 0;
}
AC截图: