本题为并查集的模板题,,,代码如下。
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int pre[50005];
int find(int x)
{
if(pre[x]==-1)return x;
else return find(pre[x]);
}
int join(int a,int b)
{
int x=find(a);
int y=find(b);
if(x!=y)
{
pre[x]=y;
}
}
int main()
{
int n,m,iCase=0;
while(cin>>n>>m)
{
if(n==0&&m==0)
break;
iCase++;
memset(pre,-1,sizeof(pre));
while(m--)
{
int u,v;
cin>>u>>v;
join(u,v);
}
int sum=0;
for(int i=1;i<=n;i++)
{
if(pre[i]==-1)
{
sum++;
}
}
printf("Case %d: %d\n",iCase,sum);
}
return 0;
}