题解 AGC005B【Minimum Sum】

用并查集来贪心。

我们可以把数列抽象成一条 \(n+1\)\(n\) 边的链,\(i\)\(i+1\) 之间的边权为 \(a_i\)。同时初始化一个有 \(n+1\) 个点的并查集,需要记录每个集合的大小。

考虑一条边做出贡献的条件是什么,就是这条边是路径上边权最小的。因此我们将所有边按边权从大到小排序,然后按顺序枚举每一条边,根据它连接的两个连通块的大小和它的边权计算贡献,之后把这条边加到图中(也就是合并它连接的两个连通块)。

由于我们按边权降序枚举,显然在加入一条边时,过这条边的每条路径的最小边权都由这条边贡献。

时间复杂度为 \(\mathcal{O}(n\log n)\)

提交记录

posted @ 2022-03-29 15:05  rui_er  阅读(27)  评论(0编辑  收藏  举报