1 条题解
-
0
我们要在一棵以节点 1 为根、共有 个节点的树上,从根出发遍历整棵树并回到根,同时希望所有节点的完成时间的最大值最小。对于每个节点 ,它第一次被访问的时刻记为 ,非根节点的完成时间为 ,根节点返回时刻为整条路径长度 ,因此根的完成时间为 。
本质上,我们需要优化这条“树的欧拉回路”的遍历顺序,使得最迟完成的节点尽可能早地完成。为此,我们引入树形动态规划。
令 表示从进入节点 时刻记作 0 开始,完成其整个子树内所有节点的最大相对时间, 表示以 为根的子树节点数。
初始化时,节点 自身在时刻 0 就被访问,完成时间为 ,故 。对每个子节点 递归地计算出 和 之后,我们要决定遍历这些子树的先后顺序。
子树中若接连选取相邻两项 ,那么答案为:
反转 后的两项为
注意到 与 不会成为答案,将其余两项作差得将 从小到大排序,这一策略能最小化 。
实现时,我们先在一次 DFS 中累积每个子树的来回耗时,用于计算 的累加部分;然后将每个子树对应的 排序,遍历已排序的子树更新 。对于根节点 ,还要将全局路径长度 加上 与 取最大,作为最终答案:
- 1
信息
- ID
- 573
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 6
- 标签
- (无)
- 递交数
- 37
- 已通过
- 11
- 上传者