又一道标准的并查集
#include<stdio.h>
int city[50000];
int find (int x)
{
int r=x;
while(r!=city[r])
r=city[r];
int i=x,j;
while(city[i]!=r)
{
j=city[i];
city[i]=r;
i=j;
}
return r;
}
int main()
{
int n,m,c1,c2,total,f1,f2,i;
int cas=1;
while(scanf("%d",&n)!=EOF)
{
total=n;
for(i=1;i<=n;i++) city[i]=i;
scanf("%d",&m);
if(n==0&&m==0) break;
while(m--)
{
scanf("%d%d",&c1,&c2);
f1=find(c1);
f2=find(c2);
if(f1!=f2)
{
city[f2]=f1;
total--;
}
}
printf("Case %d: %d\n",cas++,total);
}
}