http://poj.org/problem?id=2524
#include<iostream>
#include<stdio.h>
using namespace std;
int a[50050];
int f[50050];
int find(int x){
if(x!=a[x]) a[x]=find(a[x]);
return a[x];
}
int main()
{
int n,m,x,y,num=1;
while(cin>>n>>m){
if(n==0 && m==0) break;
for(int i=1;i<=n;i++){
a[i]=i;
f[i]=0;
}
int re=n;
for(int i=1;i<=m;i++){
cin>>x>>y;
x=find(x);
y=find(y);
if(x==y) continue;
re--;
if(f[x]>f[y]) a[y]=x;
else a[x]=y;
if(f[x]==f[y]) f[y]++;
}
cout<<"Case "<<num<<": "<<re<<endl;
num++;
}
return 0;
}