用总人数减去合并的次数得到的就是所要求的:
#include<stdio.h>
#include<string.h>
int num[50001];
int find(int x)
{
return x==num[x]?x:num[x]=find(num[x]);
}
int main()
{
int n,m,t=1;
while(~scanf("%d%d",&n,&m)&&n+m)
{
for(int i=0;i<=n;i++)
{
num[i]=i;
}
int k=0,a,b;
while(m--)
{
scanf("%d%d",&a,&b);
int xx=find(a);
int yy=find(b);
if(yy!=xx)
{
num[yy]=xx;
k++;
}
}
printf("Case %d: %d\n",t++,n-k);
}
return 0;
}