2023 牛客多校 8 D
题意
给定一个 \(n\) 个点的树,点有 \([0, m)\) 的点权,边有正的边权。\(q\) 次询问给定 \(u, x\),求 \(u\) 的子树内选择三个点,使得点权和模 \(m\) 意义下等于 \(x\),它们距离和的最大值。
做法
朴素暴力是在每个点 \(m^2\) 卷积合并儿子,最终在三个点的 LCA 处统计这个三元组,回答询问就好办了。
考虑加个优化:对于大小为 \(s\) 的子树,它的 \(f\)(选了一个点)至多有 \(s\) 个非空位置;它的 \(g\)(选了两个点)至多有 \(s^2\) 个非空位置。我们转移的时候先把这些非空位置找出来,然后互相配对进行转移。这样看起来只是常数优化,但是时间复杂度其实变成了 \(\Theta(nm^{1.5})\)。
考虑把子树分为两类(假设我们已经三度化,实际上不需要显式操作,只需要直接按顺序合并儿子就与这等价)——大小超过 \(B\) 的和小于 \(B\) 的。两个大子树合并总共只会发生 \(n/B\) 次,贡献是 \(nm^2/B\)。两个小子树合并会发生 \(n\) 次,但是复杂度只有 \(B^3\),贡献是 \(nB^3\)。一大一小子树合并,复杂度是 \(s^2m\),其中 \(s\) 是小子树大小。可以放缩成 \(sBm\),然后把 \(s\) 分配到小子树里的每个点上——每个点的祖先链一定是下面一段小子树,上面一段都是大子树,所以每个点只会贡献一次,总复杂度 \(nmB\)。总结一下就是 \(\mathrm O(\frac{nm}{B}+nB^3+nmB)\),注意到这个分析中的 \(B\) 是任取的,取它等于 \(\Theta(\sqrt{m})\) 就有总复杂度是 \(\Theta(nm^{1.5})\)。
一言以蔽之就是树形背包怎么分析都是对的。