您的位置:首页 > 产品设计 > UI/UE

[POJ 2524]Ubiquitous Religions 并查集

2015-11-03 20:34 501 查看

题目大意

求不相交集合数

裸并查集

代码

#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;

namespace Union_Find_Set{
#define MAXN 100005
int fa[MAXN],flag[MAXN];

void Initialize(){
for(int i=0;i<MAXN;i++){
fa[i]=i;flag[i]=0;
}
}

int Find(int x){
return fa[x]==x?x:fa[x]=Find(fa[x]);
}

void Union(int x,int y){
int a=Find(x),b=Find(y);
if(a>b){
fa[b]=a;
}else{
fa[a]=b;
}
}

}

int N,m,ans(0),num(1);
int main() {
while(scanf("%d%d",&N,&m)!=EOF) {
if(N==0&&m==0) break;
using namespace Union_Find_Set;
Initialize();
int a,b;
for(int i=1;i<=m;i++){
scanf("%d%d",&a,&b);
Union(a,b);
}
ans=0;
for(int i=1;i<=N;i++){
int t=Find(i);
if(!flag[t]) ans++;
flag[t]=1;
}
cout<<"Case "<<num++<<": "<<ans<<endl;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: