Acwing 346.走廊泼水节

题意

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

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

注意: 树中的所有边权均为整数,且新加的所有边权也必须为整数。

思路

考虑在求最小生成树的过程中加边,因为要加成完全图,所以每次合并两个连通块时,左边连通块的点到右边连通块的点都应该加上一条边,那么加边的权值应该是多少呢?

不妨假设以下三种情况:

设 w 为最小生成树当前的边

  1. 新边 < w
  2. 新边 = w
  3. 新边 > w

因为求最小生成树的过程中每次判断当前权值最小的边是否可以加入到最小生成树中,如果有边比 w 小,那么一定不会选 w 这条边,那么最小生成树就会改变。所以第一种情况不符合要求。

对于情况二,因为权值都一样,所以在符合最小生成树构造过程的前提下,可以选择任意一条边,虽然最小生成树的权值不会改变,但是不一定是原来的那颗树,所以第二种情况也不符合要求。

对于情况三,因为每次加的新边都比 w 要大,所以最小生成树的权值不会改变,并且一定是原来那棵树。因为要求新加边的权值总和最小值,所以设置新边的权值为 w + 1 w + 1 w+1 即可。

代码

// Author:zzqwtcc
// Problem: 走廊泼水节
// Contest: AcWing
// Time:2021-10-20 21:01:55
// URL: https://www.acwing.com/problem/content/348/
// Memory Limit: 64 MB
// Time Limit: 1000 ms#include<bits/stdc++.h>
#include<unordered_map>
// #define int long long
#define INF 0x3f3f3f3f
#define INFL 0x3f3f3f3f3f3f3f3f
#define mod 1000000007
#define MOD 998244353
#define rep(i, st, ed) for (int (i) = (st); (i) <= (ed);++(i))
#define pre(i, ed, st) for (int (i) = (ed); (i) >= (st);--(i))
#define endl '\n'
using namespace std;typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int, int> PII;
template<typename T> inline T gcd(T a, T b) { return b ? gcd(b, a % b) : a; }
template<typename T> inline T lowbit(T x) { return x & -x; }
template<typename T,typename S>inline void debug(S s,T t){cerr << s << " " << t << endl;}
template<typename T>inline void debug(T t){cerr << t << endl;}
// template<typename T> T qmi(T a, T b = mod - 2, T p = mod) { T res = 1; b %= (p - 1 == 0 ? p : p - 1); while (b) { if (b & 1) { res = (LL)res * a % p; }b >>= 1; a = (LL)a * a % p; }return res % mod; }const int N = 6010;
int n;
int f[N];
int siz[N];struct Edge{int u,v,w;bool operator<(const Edge & e)const {return this->w < e.w;}
}edge[N];void init(){for(int i = 1; i <= n;++i)f[i] = i,siz[i] = 1;
}int Find(int x){return x == f[x] ? f[x] : f[x] = Find(f[x]);
}void merge(int a,int b){int fa = Find(a);int fb = Find(b);f[fb] = fa;siz[fa] += siz[fb];
}void solve() {cin >> n;init();for(int i = 1; i <= n - 1;++i){cin >> edge[i].u >> edge[i].v >> edge[i].w;}sort(edge + 1,edge + 1 + n - 1);LL res = 0;for(int i = 1; i <= n - 1;++i){int u = edge[i].u, v = edge[i].v, w = edge[i].w;if(Find(u) == Find(v))continue;else{res += (LL)(w + 1) * (siz[Find(u)] * siz[Find(v)] - 1);merge(u,v);}}cout << res << endl;
}signed main() {int _; cin >> _;while (_--)solve();return 0;
}

Acwing 346.走廊泼水节(最小生成树)相关推荐

  1. Contest Hunter CH6201 走廊泼水节 最小生成树 Kruskal

    $ \rightarrow $ 戳我进CH原题 走廊泼水节 0x60「图论」例题 总时限10 s $ \quad $ 总内存256 MiB 描述 [简化版题意]给定一棵N个节点的树,要求增加若干条边, ...

  2. CH - 6201 走廊泼水节(最小生成树,水题)

    题目链接:点击查看 题目大意:给定一棵N个节点的树,要求增加若干条边,把这棵树扩充为完全图,并满足图的唯一最小生成树仍然是这棵树(增加的边权必须大于最小生成树上这两个点的边权),求增加的边的边权总和的 ...

  3. 346. 走廊泼水节

    给定一棵 N 个节点的树,要求增加若干条边,把这棵树扩充为完全图,并满足图的唯一最小生成树仍然是这棵树. 求增加的边的权值总和最小是多少. 注意: 树中的所有边权均为整数,且新加的所有边权也必须为整数 ...

  4. 走廊泼水节(最小生成树求最小完全图)

    传送门:走廊泼水节 思路:在求最小生成树的过程中会有很多连通块,合并每一个连通块时同时也要将两个连通块连成一个完全图,合并联通块的w是最长的一条边,也要保证是完全图求最小生成树时不变的一条边,所以额外 ...

  5. AcWing346.走廊泼水节

    刷题之路-图论 AcWing346.走廊泼水节 传送门 题目描述 做题思路及代码 /* 将树中的所有边按权值升序排序,依次扫描, 例如取出边(u,v,w),已经和u相连的点都需要和已经和v相连的点连线 ...

  6. tyvj 1391 走廊泼水节【最小生成树】By cellur925

    题目传送门 题意简化:给你一棵树,要求你加边使它成为完全图(任意两点间均有一边相连) ,满足原来的树是这个图的最小生成树.求加边的价值最小是多少. 考虑Kruskal的过程,我们每次找一条最短的,两边 ...

  7. TYVJ 1391 走廊泼水节

    描述 我们一共有N个OIER打算参加这个泼水节,同时很凑巧的是正好有N个水龙头(至于为什么,我不解释).N个水龙头之间正好有N-1条小道,并且每个水龙头都可以经过小道到达其他水龙头(这是一棵树,你应该 ...

  8. CH 6201 走廊泼水节

    玄学之门 题目: 分析: 代码: 题目: 传送门 分析: 类似kruskalkruskalkruskal算法的过程,对于一条边,如果它们的两个点属于两个不同的集合,那么这些集合间都要连边,为保证最小生 ...

  9. 【图论专题】最小生成树的扩展应用

    整理的算法模板合集: ACM模板 最小生成树的扩展应用 能用kruskal打死不用prim kruskal是要把所有的边都遍历一遍 图论中的超级源点就比较常用,要时刻想到它 题目列表: 题目 算法 A ...

最新文章

  1. Vue笔记(五)——Token生命周期
  2. 项目进度管理:规划项目进度管理
  3. 初识Microsoft Hyper-v Server
  4. python中的logger之二
  5. scp创建远程目录_在Linux系统中使用Vim读写远程文件
  6. 项目经理如何把工作简单化
  7. 512m硬盘装linux,硬盘装linux.doc
  8. 人之间的尊重是相互的_人与人之间的感情,最基本的是相互尊重
  9. 用Java做s71200的上位机_上位机通过西门子S7-1200PLC与OPC UA通讯
  10. android4.1 l36h,索尼 L36h跌破3K 升Android 4.3机型推荐(6)-搜狐数码
  11. border-radius 移动之伤
  12. mysql 5.7 存储引擎_mysql5.7——innodb存储引擎总结-阿里云开发者社区
  13. 智能控制导论 # 模糊控制 2 模糊控制器的原理与设计方法
  14. HttpGet请求数据乱码的原因
  15. Cortex-M0+电源管理
  16. css加号图标_excel单元格加号展开折叠
  17. TMS320F28335入门(七)eCAP学习
  18. 树型结构总结:二叉查找树、堆、平衡树、2-3查找树、红黑树、B树、B+树
  19. 任务调度系统就该这么设计(万能通用),稳的一批!
  20. ZCMU暑期训练四-G - Alex and a Rhombus

热门文章

  1. 关于contentWindow和contentDocument
  2. 港科科研|尘埃落定!Grab登陆纳斯达克,那么一夜狂欢之后呢?
  3. 17种求三角形面积的公式,从平面到立体
  4. 《袁老师访谈录》第八期|温维佳教授/香港科大(广州)功能枢纽署理院长【问诊未来·院长系列:科研教授的硬核创业之道】...
  5. 性能测试工具工作原理
  6. 【模型训练】YOLOv7道路交通标志检测
  7. 工业标准NRZ异步串行数据格式【来自野火stm32_USART】
  8. 钱币兑换问题(dp+数学)
  9. nlp知识点总结(中)
  10. php js 获取 客户端ip地址,JS获取客户端IP地址、MAC和主机名的7个方法汇总_javascript技巧...