链接:http://poj.org/problem?id=2524
标准的并查集的题。简单题。
复习一下并查集的使用。
#include<stdio.h>
#include<string.h>
#define MAXN 50005
int n,m;
int set[MAXN];
int find(int x)
{
int r=x;
while(set[r]!=r)
r=set[r];
return r;
}
void merge(int x,int y)
{
int fx=find(x);
int fy=find(y);
if(fx!=fy)
set[fx]=fy;
}
int main()
{
int i,ans,test=1;
int a,b;
while(scanf("%d%d",&n,&m)&&n&&m)
{
memset(set,0,sizeof(set));
ans=0;
for(i=1;i<=n;i++)
set[i]=i;
for(i=0;i<m;i++)
{
scanf("%d%d",&a,&b);
merge(a,b);
}
for(i=1;i<=n;i++)
if(set[i]==i)
ans++;
printf("Case %d: %d\n",test++,ans);
}
return 0;
}