「CF1637F」Towers
Description
Link:CF1637F
给出一棵包含 个点的树,编号 。第 个点的高度为 。
你可以在任意点放置任意数量的塔,对于每个塔,你可以选择放在哪个点,并且可以选择它的效率。设置一个效率为 的塔需要花费 金币,其中 。
如果存在一对分别位于 () 的信号塔,它们的效率分别为 ,且满足 ,且点 位于从 到 的路径上,则我们认为 能够收到信号。
请你求出使得所有顶点都接收到信号,所需的最小金币数。
数据范围:,。
时空限制:s / MiB。
Solution
注意到,叶子节点处是一定要建造塔的,否则该叶子一定无法被覆盖到。其次,非叶子节点处是不必建塔的(因为不如把非叶子节点的塔挪到叶子节点)。
考虑以 值最大的节点作为根节点 ,则根节点必须要有两个不同的子树均包含 的塔,其他点 则只需要保证子树内包含 的塔即可(因为 的子树外一定有一个 的塔)。
从下往上贪心,每次贪心地考虑子树 内已放置的塔的最大值 ,若 就不用管,否则将 替换为 即可。特别地,根节点需要考虑子树内已放置的塔的最大值与次大值(需要来自两个不同的子树)。