http://acm.hdu.edu.cn/showproblem.php?pid=1232
題意:求最少還需要建設的道路數目。
思路:簡單並查集,看還剩幾個集合。
#include<stdio.h>
int set[1500];
int find(int x)
{
while(set[x]!=x)
x=set [x];
return x;
}
void merge(int x,int y)
{
x=find(x);
y=find(y);
if(y<x)
set[x]=y;
else if(y>x)
set[y]=x;
}
main()
{
int n,m,i,x,y,cnt;
while(scanf("%d",&n)&&n)
{
scanf("%d",&m);
for(i=1;i<=n;i++)
set[i]=i;
while(m>0)
{
scanf("%d %d",&x,&y);
merge(x,y);
m--;
}
for(cnt=-1,i=1;i<=n;i++)
if(i==set[i])
cnt++;
printf("%d\n",cnt);
}
return 0;
}