POJ 2524 Ubiquitous Religions
2014-07-31 08:36
429 查看
问题的大意是:告诉你A和B在同一个宗教,让你判断最多一共有多少个不同的宗教
我们可以在输入的同时就将其的种类划分号,只需要判断par[i]==i,说明这是一个宗教,ans++即可
我们可以在输入的同时就将其的种类划分号,只需要判断par[i]==i,说明这是一个宗教,ans++即可
#include <iostream> #include <cstdio> #include <cstring> using namespace std; #define MAX_N 50010 int n,m; int par[MAX_N]; int rank[MAX_N];//起一定的节省内存空间的作用 void init(int n) { for(int i=0;i<n;i++) { par[i]=i; rank[i]=0; } } //查询树的根 int find(int x) { if(par[x]==x) return x; else return par[x]=find(par[x]);//路径压缩,对于每个节点,一旦向上走到了一次根节点,就把这个店到父亲的边改为直接连向边 } void unite(int x,int y) { x=find(x); y=find(y); if(x==y) return ; if(rank[x]<rank[y]) { //将x设为y的子树 par[x]=y; } else{ par[y]=x; if(rank[x]==rank[y]) rank[x]++; } } int main() { int t=0; while(~scanf("%d %d",&n,&m)) { if(m==n&&n==0) break; init(n); int a,b; for(int i=0;i<m;i++) { scanf("%d %d",&a,&b); unite(a,b); } int ans=0; for(int i=0;i<n;i++) { if(par[i]==i) ans++; } printf("Case %d: %d\n",++t,ans); } }
相关文章推荐
- poj-2524 Ubiquitous Religions
- Ubiquitous Religions(POJ--2524
- [ACM] POJ 2524 Ubiquitous Religions (并查集)
- poj-2236 Wireless Network &&poj-1611 The Suspects && poj-2524 Ubiquitous Religions (基础并查集)
- POJ 2524 Ubiquitous Religions
- poj 2524 Ubiquitous Religions
- POJ1611 并查集 基础 比 2524 复杂一些
- POJ 2524 Ubiquitous Religions(并查集)
- POJ 2524 Ubiquitous Religions【并查集模板】
- POJ 2524 并查集
- POJ 2524 - Ubiquitous Religions
- poj-2524-Ubiquitous Religions
- 【POJ-北大】-2524-Ubiquitous Religions(最大传染病毒人数)
- poj 2524 Ubiquitous Religions(并查集)
- POJ 2524 Ubiquitous Religions【并查集入门】
- poj 2524 并查集
- [poj 2524]Ubiquitous Religions[并查集]
- POJ 2524 Ubiquitous Religions (并查集 II)
- 【POJ】2524 Ubiquitous Religions
- POJ 2524