#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=50005;
int pre[maxn],vis[maxn];
int find(int x)
{
int r=x;
while(r!=pre[r])
r=pre[r];
int i=x,j;
while(r!=i)
{
j=pre[i];
pre[i]=r;
i=j;
}
return r;
}
void join(int x,int y)
{
int fx=find(x),fy=find(y);
if(fx!=fy)
pre[fx]=fy;
}
int main()
{
int n,Case=1;
long long m;
while(scanf("%d%I64d",&n,&m)==2&&n!=0&&m!=0)
{
for(int i=1; i<=n; i++)
{
pre[i]=i;
}
int x,y;
for(long long i=1; i<=m; i++)
{
scanf("%d%d",&x,&y);
join(x,y);
}
for(int i=1;i<=n;i++)
find(i);
memset(vis,0,sizeof(0));
int count=0;
for(int i=1;i<=n;i++){
if(pre[i]==i)
count++;
}
printf("Case %d: %d\n",Case++,count);
}
return 0;
}
poj C
猜你喜欢
转载自blog.csdn.net/qq_40861069/article/details/81104063
今日推荐
周排行