POJ The Suspects(基本的并查集)
2012-12-16 10:45
344 查看
没什么好说的,并查集的基本操作,都在注释里了
#include <iostream> #include <cstdio> #include <cstring> #define MAXN 30005 using namespace std; int parent[MAXN]; int rank[MAXN];//并查集的秩,根据题意,这里选用树的结点数。 void MakeSet(int n) { for(int i=0; i<=n; i++) { parent[i]=i; rank[i]=1; } } int FindParent(int x) { if(x!=parent[x]) parent[x]=FindParent(parent[x]); return parent[x]; } void UnionSet(int x,int y) { int px,py; px=FindParent(x); py=FindParent(y); if(px==py)return; if(rank[px]>=rank[py]) { parent[py]=px; rank[px]+=rank[py]; // rank[py]=0; 这里不能搞成0.因为rank[i]表示的是以i为根的树的结点数。 } else { parent[px]=py; rank[py]+=rank[px]; // rank[px]=0; } } int main() { int n,m; while(scanf("%d %d",&n,&m)!=EOF&&(n||m)) { MakeSet(n); if(n==0)continue; //poj里有n=0的坑爹数据,特判下 for(int i=0; i<m; i++) { int t; int id; int leader; scanf("%d %d",&t,&leader); t--; while(t--) { scanf("%d",&id); UnionSet(leader,id); //每一个group的leader取这个group的第一个人 } } printf("%d\n",rank[FindParent(0)]); } return 0; }
相关文章推荐
- 并查集--POJ - 1611 The Suspects
- POJ1-1611-The Suspects【并查集】
- poj The Suspects(并查集)
- POJ 1611-The Suspects【并查集】
- POJ 1611 The Suspects - 并查集
- poj-1611-The Suspects【并查集】
- POJ 1611 The Suspects 并查集 Union Find
- poj 1611 The Suspects 并查集
- poj The Suspects(并查集)
- poj 1611 The Suspects // hoj 1564 The Suspects 并查集
- POJ 1611 The Suspects 并查集简单题
- POJ1611:The Suspects【并查集】
- POJ 1611 The Suspects【并查集入门】
- poj The Suspects(并查集)
- poj 1611 The Suspects 【并查集】
- poj The Suspects(并查集)
- The Suspects poj 1611 并查集
- 并查集-POJ-1611-The Suspects
- POJ 1611 The Suspects 并查集
- POJ 1611 The Suspects【并查集入门】