题目大意:有n个人,编号从1到n。然后m行,每行两个数代表两个信仰相同的人编号,问有几种不同的信仰。
<pre name="code" class="cpp">#include <stdio.h>
#include <string.h>
int bc[60000];
int fin(int x)
{
int r=x;
while(r!=bc[r])
r=bc[r];
while(r!=bc[x])
{
int k=bc[x];
bc[x]=r;
x=bc[k];
}
return r;
}
void add(int x,int y)
{
bc[fin(x)]=fin(y);
}
int main()
{
int n,m;
int u,v,j=1;
while(~scanf("%d%d",&n,&m))
{
if(n==0&&m==0)
break;
int sum=0;
for(int i=1;i<=n;i++)
bc[i]=i;
while(m--)
{
scanf("%d%d",&u,&v);
add(u,v);
add(v,u);
}
for(int i=1;i<=n;i++)
{
if(fin(i)==i)
sum++;
}
printf("Case %d: %d\n",j++,sum);
}
return 0;
}