POJ_1611(并查集应用)
2010-07-29 22:19
323 查看
#include <cstdlib> #include <iostream> #include <cstdio> using namespace std; const int MAX = 30001; int parent[MAX]; int num[MAX]; void initUnion(int count) { for(int i=0; i<count; i++) { parent[i] = i; num[i] = 1; } } int findElem(int elem) { if(parent[elem] != elem) parent[elem] = findElem(parent[elem]); return parent[elem]; } void unionElem(int a, int b) { int x = findElem(a); int y = findElem(b); if(x == y) return; if(num[x] <= num[y]) { parent[x] = y; num[y] += num[x]; } else { parent[y] = x; num[<mce:script type="text/javascript" src="http://hi.images.csdn.net/js/blog/tiny_mce/themes/advanced/langs/zh.js" mce_src="http://hi.images.csdn.net/js/blog/tiny_mce/themes/advanced/langs/zh.js"></mce:script><mce:script type="text/javascript" src="http://hi.images.csdn.net/js/blog/tiny_mce/plugins/syntaxhl/langs/zh.js" mce_src="http://hi.images.csdn.net/js/blog/tiny_mce/plugins/syntaxhl/langs/zh.js"></mce:script>x] += num[y]; } } int main(int argc, char *argv[]) { int m, n; //freopen("input.txt", "rt", stdin); //freopen("output.txt", "wt", stdout); while(scanf("%d%d", &n, &m) && n != 0) { initUnion(n); while(m-- > 0) { int eachGroup; scanf("%d", &eachGroup); int first, other; scanf("%d", &first); while(eachGroup-- > 1) { scanf("%d", &other); unionElem(first, other); } } printf("%d/n", num[findElem(0)]); } return EXIT_SUCCESS; }
初次使用并查集...
相关文章推荐
- POJ1611__并查集的基础应用
- POJ 1611 The Suspects [简单并查集应用]
- poj 1611 The Suspects 初级->数据结构->简单并查集的应用
- poj1611 The Suspects(并查集应用)
- POJ 1611 并查集详解+基础应用
- POJ1611 - The Suspects (并查集的应用)
- poj 1611 简单并查集的应用
- poj 1611 简单并查集的应用
- poj 1611 The Suspects(启发式式合并,并查集)
- POJ-1611 The Suspects (并查集模板题)
- POJ 1611 The Suspects(并查集)
- 数据结构 并查集 POJ 1611
- poj1182 食物链 并查集应用
- POJ - 1611-The Suspects(并查集)
- POJ 2492 A Bug's Life【并查集的简单应用同类的判断】
- poj 1611(简单并查集的变形)
- poj 1611 食物链(并查集)
- POJ 1611 (并查集,按秩合并)
- POJ1611 The Suspects(并查集)
- POJ 1611 The Suspects (并查集)