我们假设以 1 为根且 dep1=0 。
考虑将贡献归到每个点上,那么当目前枚举到子树 p 时,p 的子树内的点 x 的贡献应该是 depx×∏w 。
换根 dp 的方程中不能有 dep ,故我们将 depx 拆到从 x 到根的每一条边上。并且将每一条边与与其相连的子节点对应。换句话说,当枚举到子树 p 时,我们只计算 p 的子树内除 p 以外的节点的相对深度+1的贡献(如果理解了将边视作相连的子节点上的话,那么 +1 也好理解了)。p 的贡献留在 p 的父节点计算。
带入数值考虑可能形象一点。当枚举到子树 p 时,假设 x 的相对深度为 a ,路径权值之积为 b ,那么当枚举到子树 fap 时,x 的贡献会发生变化: a×b→(a+1)×b×w 。
将之后的贡献拆开成 a×b×w+b×w 。前面的 a×b 恰好是 x 之前的贡献,我们直接设为 f[p],表示 p 的子树内除 p 以外的节点的相对深度+1的贡献;那么问题就在于后面的 b×w ,也就是路径权值之积的和。我们单独设 g[p] 表示 p 子树内路径权值之积的和,那么我们可以得到转移方程为