hdu 5253(最小生成树)
来源:互联网 发布:广发东财大数据 编辑:程序博客网 时间:2024/04/29 20:52
题解:用kruskal算法,把每个点和右、下两个方向的点的边存起来,权值就是差值的绝对值,然后按升序排序,用并查集找到最小生成树。
#include <stdio.h>#include <string.h>#include <algorithm>#include <cmath>using namespace std;const int N = 1005;int m, n, g[N][N], cnt, pa[1000005];struct Edge { int u, v, w;}e[4000005];long long sum, num;bool cmp(Edge a, Edge b) { return a.w < b.w;}int get_parent(int x) { return x == pa[x] ? x : pa[x] = get_parent(pa[x]);}int Union(int x, int y) { int px = get_parent(x); int py = get_parent(y); if (px != py) { pa[px] = py; return 1; } return 0;}int main() { int t, cas = 1; scanf("%d", &t); while (t--) { scanf("%d%d", &n, &m); int temp = n * m; for (int i = 0; i < temp; i++) pa[i] = i; for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) scanf("%d", &g[i][j]); cnt = 0; for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) { if (j + 1 < m) { e[cnt].u = i * m + j; e[cnt].v = i * m + j + 1; e[cnt++].w = abs(g[i][j + 1] - g[i][j]); } if (i + 1 < n) { e[cnt].u = i * m + j; e[cnt].v = (i + 1) * m + j; e[cnt++].w = abs(g[i + 1][j] - g[i][j]); } /* if (j - 1 >= 0) { e[cnt].u = i * m + j; e[cnt].v = i * m + j - 1; e[cnt++].w = abs(g[i][j - 1] - g[i][j]); printf("%d %d %d\n", e[cnt - 1].u, e[cnt - 1].v, e[cnt - 1].w); } if (i - 1 >= 0) { e[cnt].u = i * m + j; e[cnt].v = (i - 1) * m + j; e[cnt++].w = abs(g[i - 1][j] - g[i][j]); printf("%d %d %d\n", e[cnt - 1].u, e[cnt - 1].v, e[cnt - 1].w); }*/ } sort(e, e + cnt, cmp); sum = 0; for (int i = 0; i < cnt; i++) if (Union(e[i].u, e[i].v)) sum += e[i].w; printf("Case #%d:\n%lld\n", cas++, sum); } return 0;}
0 0
- hdu 5253(最小生成树)
- HDU 1879 最小生成树
- HDU-1836 最小生成树
- hdu 1863 最小生成树
- hdu 1233 最小生成树
- hdu 4081 最小生成树
- hdu 1863 最小生成树
- HDU-1162(最小生成树)
- hdu 1233 最小生成树
- hdu 2682 最小生成树
- HDU 1102 最小生成树
- HDU 1162 最小生成树
- HDU 1233 最小生成树
- HDU 1301 最小生成树
- HDU 1863 最小生成树
- HDU 1879 最小生成树
- HDU 3371 最小生成树
- HDU 4463 最小生成树
- 使用Python自动下载妹子图的图片到本地
- 结构体位域的含义
- Android面试题整理
- 代理服务器安全配置
- Java构造和解析Json数据的两种方法详解一
- hdu 5253(最小生成树)
- OC--import和宏定义
- 项目阶段总结:思想感悟
- <开发调试>一次bug的启示
- 关于SVM
- 有序二叉树链式存储结构1——插入与遍历
- 随想录(简单的链接文件)
- vs2013+Xamarin F5提示部署不错误
- [Java5新特性]可变参数