P12038题解报告
这是一位五年级菜逼的第 15 篇题解,写的不好见谅。
题目传送门,题意很简单,就不多赘述了。
题目要求选择一个连通块,使得这个连通块的点权和 \(\bmod m\) 最小。而在一颗树中,重心和将它分割后的两个连通块是有大小关系的,所以我们可以重点讨论重心的情况。
我们不妨假设重心为 \(u\),分两种情况讨论。
如果 \(u\) 不在所选的连通块中,不妨将 \(u\) 删掉,那么剩下的两个连通块的大小一定不超过 \(\frac{n}{2}\)。所以可以枚举被分割的几个连通块的子集,统计答案即可。复杂度不超过 \(O(n \times 2^{\frac{n}{2}})\)。
如果 \(u\) 在所选的连通块中,考虑换根到 \(u\)。通过大眼睛观察法,我们猜测:
总能将 \(u\) 的子树分为集合 \(S, T\),使得 \(\max\{|S|, |T|\} \le \frac{2}{3}n\)。
我们证明一下:
考虑数学归纳法证明。
若 \(u\) 的度数 \(\le 3\),根据平均数原理,必然存在一个子树,它的大小 \(\ge \frac{n}{3}\)。我们不妨假设这个子树就是 \(S\),剩下的为 \(T\),则 \(|T| \le \frac{2}{3}n\)。又由于 \(u\) 为重心,所以 \(|S| \le \frac{n}{2}\),结论显然成立。
若当 \(u\) 的度数为 \(k \le 3\) 的时候成立,则当 \(u\) 的度数为 \(k + 1\) 时,再次根据平均数原理,最小的子树大小和次小的子树大小之和 \(\le \frac{2}{k + 1}n \le \frac{1}{2}n\),所以考虑将它们合并,那么 \(u\) 仍然是重心,此时 \(u\) 的度数变成了 \(k\)。由归纳假设,当 \(u\) 的度数为 \(k + 1\) 时依然成立。
由数学归纳法,命题成立。
那么根据我们刚才的证明操作,我们可以求出 \(S, T\),那么所选的集合一定是 \(S\) 的子集和 \(T\) 的子集的并集。我们就可以枚举 \(S\) 的子集,枚举 \(T\) 的子集后将所枚举到的子树权值和 \(\bmod m\) 的值记录到两个数组中,那么问题就变成了:
有两个集合,集合内的元素均 \(< m\),在每个集合内选一个数,请你求出所选的数的和 \(\bmod m\) 的最大值。
我们假设选的两个数为 \(x, y\),则答案为 \(x + y\) 或 \(x + y - m\)。我们只需考虑是否要 \(- m\) 即可。如果不减 \(m\),考虑枚举 \(x\),\(y\) 就是第二个序列中最大的 \(< m - x\) 的值。如果 \(- m\),那么 \(y\) 就是第二个序列中最大的。最后求答案即可。时间复杂度为 \(O(2^{\frac{2}{3}n})\),可以通过。