解题思路
本题给出了一棵包含 n 个节点的树,每个节点 i 有一个处理能力 wi。对于每一台服务器 i,若它单独宕机,则该节点以及与其相连的所有边都会被移除,原树会分裂成若干个连通分量(子网)。每个连通分量的“子网处理能力”定义为该连通分量内所有存活服务器的处理能力的最大值;整个数据中心的“总剩余处理能力”为所有子网的子网处理能力之和。我们需要对每个 i 求出仅移除 i 后的总剩余处理能力。
删除一个节点 u 后,剩余的连通分量包括:
- 每个儿子 v 所在的子树(独立成为一个连通分量);
- u 的父节点一侧的剩余部分(如果有父节点)构成一个连通分量。
因此,问题可以转化为:对于每个节点 u,我们需要知道以 u 为根的子树中(不删除任何节点)处理能力的最大值,以及当 u 被删除后,它“父侧”部分的处理能力最大值。前者可以通过一次自底向上的树形 DP 求出,后者可以通过第二次自顶向下的 DP 求出。具体步骤如下: