题目大意:有N个人(N<50000),要求这N个人最多能有多少种不同的信仰,但是你不能一个一个的问,每次只能两个两个的问他们的信仰是否相同
考察点:并查集
思路分析:赤裸裸的并查集。。
#include<stdio.h>
int p[50001];
int find(int x)
{
if (p[x]==x) return x;
else return p[x]=find(p[x]);
}
int main()
{
int n,m,x,y,i,ans,t;
t=0;
while (2>1)
{
t++;
scanf("%d%d",&n,&m);
if ((n==0)&&(m==0)) break;
if (m==0) {printf("Case %d: %d\n",t,n);continue;}
for (i=1;i<=n;i++) p[i]=i;
for (i=1;i<=m;i++)
{
scanf("%d%d",&x,&y);
x=find(x);y=find(y);
if (x!=y) p[y]=x;
}
ans=0;
for (i=1;i<=n;i++)
if (p[i]==i) ans++;
printf("Case %d: %d\n",t,ans);
}
return 0;
}