1畅通工程
http://acm.hdu.edu.cn/showproblem.php?pid=1232
#include<iostream>
using namespace std;
const int maxn=1000;
int par[maxn+1];
void init(int n)
{
int i;
for(i=1;i<=n;i++)
{
par[i]=i;
}
}
int f(int x)
{
while(x!=par[x])
{
x=par[x];
}
return x;
}
void combine(int x,int y)
{
int m=f(x);
int n=f(y);
if(m!=n)
par[m]=n;
}
int main()
{
int n,m;
while(cin>>n)
{
if(!n) break;
init(n);
cin>>m;
int i,a,b;
for(i=0;i<m;i++)
{
cin>>a>>b;
combine(a,b);
}
int cnt=0;
for(i=1;i<=n;i++)
{
if(par[i]!=i)
cnt++;
}
cout<<n-cnt-1<<endl;
}
return 0;
}