题意:
统计1-n的宗教信仰的种类,这里假设:没有关系的两个人的信仰肯定是不同的。
思路:
并查集来合并所有有相同信仰的人,最后统计集合的个数即可。
代码如下:
const int M = 50005;
int p[M], flag[M];
int find(int x) { return p[x]==x?x:p[x]=find(p[x]); }
int main()
{
int n, m, a, b, k = 0;
while(scanf("%d%d", &n, &m) && n+m)
{
for(int i = 1; i <= n; ++i) p[i] = i, flag[i] = 1;
for(int i = 1; i <= m; ++i)
{
scanf("%d%d", &a, &b);
int x = find(a);
int y = find(b);
if(x!=y)
p[x] = y;
}
int ans = 0, tmp;
for(int i = 1; i <= n; ++i)
{
tmp = find(i);
ans+=flag[tmp];
flag[tmp] = 0;
}
printf("Case %d: %d\n", ++k, ans);
}
return 0;
}