1.思路分析
根据题意,统计所有人的宗教信仰,为集合操作,应使用并查集。
2.方法设计及性能衡量
实现并查集即可,计算合并后的集合数量。
3.实现部分
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
int n,m,group=0,par[50010];
void init(){
int i;
for(i=1;i<=n;i++){
par[i]=i;
}
}
int find(int x){
if(par[x]==x)return x;
else return par[x]=find(par[x]);
}
int unio(int x,int y){
x=find(x);
y=find(y);
if(x==y)return 0;
else {
par[x]=y;
return 1;
}
}
int main(){
while(scanf("%d%d",&n,&m)!=EOF){
if(n==0&&m==0)break;
group++;
int i,a,b,count=n;
init();
for(i=0;i<m;i++){
scanf("%d%d",&a,&b);
if(unio(a,b)!=0)count--;
}
printf("Case %d: %d\n",group,count);
}
return 0;
}