题目链接http://icpc.ahu.edu.cn/OJ/ContestProblem.aspx?cid=46&id=528
和夺宝奇兵一样也是统计集合的个数
代码如下
#include<stdio.h>
int father[1005];
int set[1005];
int getfather(int x)
{
if(x!=father[x])
father[x]=getfather(father[x]);
return father[x];
}
void add(int x,int y)
{
int fx=getfather(x);
int fy=getfather(y);
if(fx!=fy)
father[fx]=fy;
}
int main()
{
int i,n,m,a,b;
while(scanf("%d%d",&n,&m)!=EOF)
{
int ans=0;
memset(set,0,sizeof(set));
for(i=1;i<=n;i++)
father[i]=i;
for(i=0;i<m;i++)
{
scanf("%d%d",&a,&b);
add(a,b);
}
for(i=1;i<=n;i++)
{
int t=getfather(i);
set[t]=1;
}
for(i=1;i<=n;i++)
{
ans+=set[i];
}
printf("%d\n",ans-1);
}
}