并查集
#include<iostream>
#include<algorithm>
using namespace std;
int parent[50001];
int find(int* p,int r)
{
while(p[r]!=r)
r=p[r];
return r;
}
int main()
{
int n,m;
int c=0;
while(1)
{
cin>>n>>m;
if(n==0&&m==0)
break;
else if(m==0)
{
c++;
cout<<"Case "<<c<<": "<<n<<endl;
}
else{
c++;
for(int i=0;i<n;i++)
{
parent[i]=i;
}
int ans=n;
for(int i=0;i<m;i++){
int x;
int y;
cin>>x>>y;
int a=find(parent,x);
int b=find(parent,y);
if(a>b)
{
parent[a]=b;
ans--;
}
else if(a<b)
{
parent[b]=a;
ans--;
}
}
cout<<"Case "<<c<<": "<<ans<<endl;
}
}
return 0;
}