//题目来自于HDU1232
注意:两个城市之间可以有多条道路相通,也就是说
3 3
1 2
1 2
2 1
这种输入也是合法的
当N为0时,输入结束,该用例不被处理。
4 2 1 3 4 3 3 3 1 2 1 3 2 3 5 2 1 2 3 5 999 0 0
1 0 2 998
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int f[1000];
int hash[1000];
int fine(int n)
{
if(f[n]==n)return n;
else
{
f[n]=fine(f[n]);
return f[n];
}
}
int main()
{
int n,m,t;
int j,k,i;
while(cin>>n)
{
if(n==0)break;
cin>>m;
for(j=0; j<1000; j++)
f[j]=j;
t=0;
memset(hash,0,sizeof(hash));
if(m==0)
cout<<n-1<<endl;
else
{
for(j=0; j<m; j++)
{
cin>>k>>i;
f[fine(k)]=fine(i);
}
for(j=1; j<=n; j++)
{
if(hash[fine(j)]==0)
{
hash[fine(j)]=1;
t++;
}
}
cout<<t-1<<endl;
}
}
}