HDU 4424 - Conquer a New Region(最大生成树)
来源:互联网 发布:tcp网络编程linux 编辑:程序博客网 时间:2024/06/13 05:49
题目:
http://acm.hdu.edu.cn/showproblem.php?pid=4424
题意:
n个点的树,i点到j点的路径最大价值是i到j点的路的权值最小值,以一个点为源点,使得从这个点到其他点的总价值最大。
思路:
将边权值按照从大到小排序,枚举每一条边,此时的边为当前所有边的最小边,判断将u集合合并到v集合还是 v集合合并到u集合,使用并查集实现。最后集合的祖先就是源点。
AC.
#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>using namespace std;const int maxn = 2e5+5;struct Edge{ int u, v, w; bool operator < (const Edge &A) const{ return w > A.w; }}edge[maxn];int fa[maxn];int find(int x){ if(fa[x] == x) return x; else return fa[x] = find(fa[x]);}int num[maxn];void unite(int x, int y){ x = find(x), y = find(y); if(x != y) { fa[y] = x; num[x] += num[y]; }}long long sum[maxn];void init(int n){ for(int i = 1; i <= n; ++i) { fa[i] = i; num[i] = 1; } memset(sum, 0, sizeof(sum));}int main(){ //freopen("in", "r", stdin); int n; while(~scanf("%d", &n)) { init(n); for(int i = 0; i < n-1; ++i) { scanf("%d%d%d", &edge[i].u, &edge[i].v, &edge[i].w); } sort(edge, edge+n-1); long long s1, s2; for(int i = 0; i < n-1; ++i) { int u = edge[i].u, v = edge[i].v, w = edge[i].w; int fu = find(u), fv = find(v); if(fu != fv) { s1 = (long long)w*num[fu] + sum[fv]; s2 = (long long)w*num[fv] + sum[fu]; if(s1 > s2) { unite(fv, fu); sum[fv] = s1; } else { unite(fu, fv); sum[fu] = s2; } } } printf("%I64d\n", sum[find(1)]); } return 0;}
0 0
- HDU 4424 Conquer a New Region 最大生成树
- HDU 4424 - Conquer a New Region(最大生成树)
- HDU 4424 Conquer a New Region(分治 并查集 最大生成树)
- HDU 4424 Conquer a New Region (最小生成树+贪心)
- hdu 4424 Conquer a New Region
- hdu 4424 Conquer a New Region
- hdu 4424 Conquer a New Region
- HDU 4424 Conquer a New Region
- hdu 4424 Conquer a New Region
- Conquer a New Region HDU
- Conquer a New Region HDU
- Conquer a New Region HDU
- Conquer a New Region HDU
- Conquer a New Region HDU
- Hdu 4424 Conquer a New Region 并查集
- hdu 4424 Conquer a New Region (贪心+并查集)
- hdu 4424 Conquer a New Region(并查集)
- hdu 4424 Conquer a New Region 并查集
- Spatial Pyramid Matching for Recognizing Natural Scene Categorie(阅读)
- 【Code Forces 320A】【二进制拆分】Raising Bacteria 细胞繁殖 每天倍增
- 面试总结
- POX安装和部分配置
- c语言小工具
- HDU 4424 - Conquer a New Region(最大生成树)
- 前端笔试题
- Redis学习10之Jedis连接redis和使用
- Dev-C++制作dll文件供Visual Basic调用程序
- 光线追踪技术 第二章
- jQuery404秒倒计时
- Python C++ interoperability
- android smali 笔记
- Git基础 - 查看提交历史,限制输出长度,撤销