传送门:HDU1232
题意:不做赘述
题解:用并查集求出的连通分量个数减一
代码:
#include <iostream>
#include <cstdio>
using namespace std;
int father[1005];
int Find(int x)
{
if(x==father[x])
return x;
return Find(father[x]);
}
void Union(int x,int y)
{
int xx=Find(x);
int yy=Find(y);
father[xx]=yy;
}
int main()
{
int n,m,a,b,i,ans;
while(~scanf("%d",&n)&&n)
{
scanf("%d",&m);
for(i=1;i<=n;i++) father[i]=i;
for(i=0;i<m;i++)
{
cin>>a>>b;
Union(a,b);
}
for(i=1,ans=0;i<=n;i++)
if(father[i]==i)
ans++;
ans--;
cout<<ans<<endl;
}
return 0;
}