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

poj 2524 Ubiquitous Religions 并查集

2012-07-05 04:19 363 查看
题意:给你n个学生和m对关系,每对关系表示这两个学生有同一个宗教信仰,求学校里最多有几种不同的宗教信仰。

分析:并查集,初始有n个几何,每次关系都把两个元素所在的集合合到一起。

View Code

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define re(i,n) for(int i=0;i<n;i++)
#define re1(i,n) for(int i=1;i<=n;i++)
#define ll long long
const int maxn =50005;
int p[maxn];
bool vis[maxn];
void init() { re(i,maxn) p[i] = i; }
int find(int x) { return x == p[x] ? x : p[x] = find(p[x]); }
void Union(int x , int y) {
int a = find(x) , b = find(y);
p[a] = p[b] = p[x] = p[y] = min(a , b);
}
int n ;
ll m;
int main() {
int cas = 1;
while(~scanf("%d%lld",&n,&m) && n) {
init();
while(m--) {
int u,v;
scanf("%d%d",&u,&v);
if(find(u) != find(v)) { Union(u , v); n --; }
}
printf("Case %d: %d\n",cas++,n);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: