1 条题解
-
0
题解
思路
设最终把根移到顶点 。移动根的最少次数就是初始根 到 的边数 。若 表示 到最远顶点的边数,则收益为
问题转化为求所有顶点中该式的最大值。
做法
小规模时,可以依次把每个顶点当作根,遍历整棵树求其偏心距 ,总复杂度为 。
若 ,从顶点 移动 条边后,偏心距至多比 增加 。因此新收益至多为
不移动一定最优,只需求一次从 1 出发的最远距离。
一般情况下使用树直径。任取顶点 ,找到离它最远的顶点 ;再从 出发找到最远的顶点 ,则 是一对直径端点。树上任意顶点 的最远顶点一定可以取为某个直径端点,因而
分别从 遍历树得到三组边数距离,再枚举 代入收益公式即可。
正确性证明
移动根只改变根的位置,不改变树。树上从 1 到 的路径唯一,因此到达 的最少移动费用恰为 ;售价则恰为 ,收益公式成立。
树直径端点性质保证对每个 ,到全树最远点的距离等于它到 两者距离的较大值。三次遍历得到的 均为树上的精确距离,所以算法为每个可能的新根计算了精确收益。枚举所有顶点取最大值,所得结果就是全局最优收益。
复杂度分析
每个测试用例进行常数次树遍历,时间复杂度为 ,空间复杂度为 。所有测试用例总复杂度为 。
- 1
信息
- ID
- 1127
- 时间
- 2000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 0
- 上传者