并查集 按秩合并&路径压缩
来源:互联网 发布:逍遥子 晓梦 知乎 编辑:程序博客网 时间:2024/06/16 05:52
并查集自己也只是会了方法,稍微有点思维难度的题就写不出来【例如银河英雄传说】,Menci教的代码。
还有Menci是把并查集写成了一个结构体,里面有各种成员函数,也超级棒。
例题是HDU 1232
#include <cstdio>const int maxn = 1005;int f[maxn], dep[maxn], n, m;int Find(int x) //带路径压缩 { return x == f[x] ? x : f[x] = Find(f[x]);}void Merge(int x, int y) //按秩合并 { int fx = Find(x); int fy = Find(y); if (dep[fx] <= dep[fy]) { f[fx] = fy; if (dep[fx] == dep[fy]) { dep[fy]++; } } else { f[fy] = fx; }}int main(){ //scanf("%d %d", &n, &m); while (scanf("%d %d", &n, &m) != EOF && n) { for (int i = 1; i <= n; i++) { f[i] = i; } for (int i = 1; i <= m; i++) { int x, y; scanf("%d %d", &x, &y); Merge(x, y); } int ans = 0; for (int i = 1; i <= n; i++) { if (f[i] == i) { ans++; } } printf("%d\n", ans - 1); } return 0;}
这道题是合并之后,只要把树的根都连起来它们就都连通了,我到底是有多弱啊还是没想到Orz
不带按秩合并的merge是这样子
void merge(int x, int y){ a[find(x)] = find(y);}
0 0
- 并查集(按秩合并、路径压缩)
- 并查集 按秩合并&路径压缩
- 并查集,路径压缩,按元素数量合并,带权并查集
- Disjointset 并查集(按秩合并,与路径压缩)的模板
- 杭电 1856 并查集路径压缩+按秩合并
- 并查集的两种优化(按秩合并,路径压缩)
- 并查集(两个优化—按秩合并、路径压缩) poj2492
- 数据结构实现之并查集(使用按秩合并和路径压缩)
- 并查集讲解(按秩合并与路径压缩),模板与典型例题
- 并查集的优化:按秩合并和路径压缩
- 【模板】【数据结构】并查集(路径压缩+按秩合并)
- 并查集的启发式合并 和 路径压缩
- 并查集——启发式合并,路径压缩
- 并查集(路径压缩 && 启发式合并!!!)
- 并查集的优化---路径压缩与启发式合并
- 并查集的“并优化”(leader合并)和“查优化”(路径压缩)
- 并查集 & 路径压缩
- 【并查集+压缩路径】
- linux 下source命令
- Android 5.1 如何内置APK在/system/priv-app目录下的Android.mk
- 快速排序
- 在table表格中奇偶行数样式的改变
- 节能环保对PCB行业发展的挑战
- 并查集 按秩合并&路径压缩
- jQuery插件AjaxFileUpload实现ajax文件上传
- 寄存器
- 电路板设计-PCB布线工艺要求
- POJ 2018 二分
- c++ 随机数
- 勾股定理一日一证连载147
- 按钮样式的添加
- hdu 1085 普通母函数