#include <iostream>
#include <set>
#include <vector>
using namespace std;
int n,m,caseNumber=0;
const int MAXN=50000+5;
vector<int>stu(MAXN);
vector<int>height(MAXN);
int findFather(int x){
if(x!=stu[x]) stu[x]=findFather(stu[x]);
return stu[x];
}
void Union(int x,int y){
x=findFather(x);
y=findFather(y);
if(x!=y){
if(height[x]<height[y]) stu[x]=y;
else if(height[x]>height[y]) stu[y]=x;
else{
stu[y]=x;
height[x]++;
}
}
return;
}
int main(){
while(scanf("%d%d",&n,&m)!=EOF){
if(n==0&m==0)break;
for(int i=1;i<=n;++i){ //初始化Initial
stu[i]=i;
height[i]=0;
}
for(int i=1;i<=m;++i){
int t1,t2;
scanf("%d %d",&t1,&t2);
Union(t1,t2);
}
set<int>s;
for(int i=1;i<=n;++i){
s.insert(findFather(i));
}
printf("Case %d: %d\n",++caseNumber,s.size());
}
return 0;
}
2524:无处不在的宗教(并查集)
最新推荐文章于 2024-07-18 11:20:52 发布