博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AcWing 走廊泼水节
阅读量:4485 次
发布时间:2019-06-08

本文共 1796 字,大约阅读时间需要 5 分钟。

AcWing 走廊泼水节

Description

  • 给定一棵N个节点的树,要求增加若干条边,把这棵树扩充为完全图,并满足图的唯一最小生成树仍然是这棵树。

    求增加的边的权值总和最小是多少。

Input

  • 第一行包含整数t,表示共有t组测试数据。

    对于每组测试数据,第一行包含整数N。

    接下来N-1行,每行三个整数X,Y,Z,表示X节点与Y节点之间存在一条边,长度为Z。

Output

  • 每组数据输出一个整数,表示权值总和最小值。

    每个结果占一行。

Sample Input

231 2 21 3 341 2 32 3 43 4 5

Sample Output

417

Data Size

  • N≤6000,Z≤100

题解:

  • 最小生成树。
  • 思考库鲁斯卡尔的构造过程。先按边权大小排序,每次取一条边,如果边两端的点不在一个集合,就连这条边。那么对于此题,因为是完全图。如果边两段的点不在一个集合,那么两个集合会产生的边数是集合A的点数 * 集合B的点数。那么我们要构造的边就是(点数 * 集合B的点数 - 1)。边权显然必定是此边的边权 + 1。

  • 那么并查集维护就行。(顺带一提,并查集路径压缩和按秩合并可以一起用..

#include 
#include
#include
#define N 6005#define int long longusing namespace std;struct E {int u, v, w;} e[N];int T, n, cnt, ans;int fat[N], size[N];int getFat(int x){ if(x == fat[x]) return x; return fat[x] = getFat(fat[x]);}void merge(int x, int y, int z){ int fx = getFat(x), fy = getFat(y); ans += (size[fx] * size[fy] - 1) * (z + 1); if(size[fx] > size[fy]) swap(fx, fy); size[fy] += size[fx], fat[fx] = fy;}int read(){ int x = 0, f = 1; char c = getchar(); while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();} while(c >= '0' && c <= '9') {x = x * 10 + c - '0'; c = getchar();} return x *= f;}bool cmp(E x, E y) {return x.w < y.w;}signed main(){ cin >> T; while(T--) { n = read(), cnt = ans = 0; for(int i = 1; i <= n; i++) fat[i] = i, size[i] = 1; for(int i = 1; i < n; i++) { e[++cnt].u = read(); e[cnt].v = read(); e[cnt].w = read(); } sort(e + 1, e + 1 + cnt, cmp); for(int i = 1; i < n; i++) if(getFat(e[i].u) != getFat(e[i].v)) merge(e[i].u, e[i].v, e[i].w); printf("%lld\n", ans); } return 0;}

转载于:https://www.cnblogs.com/BigYellowDog/p/11386321.html

你可能感兴趣的文章
PAT乙级1025
查看>>
找的好网站(macdow语法,扫描二维码,)
查看>>
浏览器插件开发遇到的问题
查看>>
JS之正则表达式
查看>>
EF Core 1.0 和 SQLServer 2008 分页的问题
查看>>
BZOJ1798: [Ahoi2009]Seq 维护序列seq
查看>>
PS--人物黄金色调
查看>>
开启ucosii的移植之旅
查看>>
推荐一款能写原创诗词的小程序
查看>>
Codeforces Round #496 (Div. 3) ABCDE1
查看>>
Bundle display name 与 Bundle name 的区别
查看>>
MySQL创建外键关联错误 - errno:150
查看>>
谈 jquery中.band() .live() .delegate() .on()的区别
查看>>
POJ 3267 The Cow Lexicon 简单DP
查看>>
线性代数(矩阵乘法):NOI 2007 生成树计数
查看>>
问题 B: 合并车厢
查看>>
linux 下tomcat 开机自启动
查看>>
201521123018 《Java程序设计》第11周学习总结
查看>>
如何配置属于自己的Git账户
查看>>
babel之配置文件.babelrc入门详解
查看>>