并查集基本入门 畅通工程 HDUhttp://acm.hdu.edu.cn/showproblem.php?pid=1232
#include<stdio.h>
#define N 1000
int set[N];
void init(int n)
{
int i;
for(i=1;i<=n;++i)
set[i] = i;
}
int root(int x)
{
if(set[x]!=x)
set[x] = root(set[x]);
return set[x];
}
void merge(int a, int b)
{
int x = root(a);
int y = root(b);
if(x!=y)
set[x] = y;
}
int main()
{
int city;
int way;
int i;
int a,b;
int result;
while(~scanf("%d %d",&city,&way)&&city!=0)
{
result = 0;
init(city);
for(i=1;i<=way;++i)
{
scanf("%d %d",&a,&b);
merge(a,b);
}
for(i=1;i<=city;++i)
if(root(i)==i)
result++;
printf("%d
",result-1);
}
return 0;
}