[ABC369G] As far as possible
考虑删除树上一条边 \((u, v, l)\) ,此时剩余部分构成两个连通块,如果不包含节点 \(1\) 的连通块中有 Aoki 选择的点,那个这条边的贡献至少为 \(2l\) 。
简单构造发现,当 Takahashi 构造的路径恰好为 Aoki 选择的点和 \(1\) 构成的虚树时,能够取到路径长度的最小值。
此时我们将题目转化为在树上选择 \(K\) 个互不相同的节点,使得这些节点与 \(1\) 构成的虚树的边权之和最小。
显然可以用 dp 解决,设 \(f_{u, i}\) 表示在以 \(u\) 为根的子树中选择 \(i\) 个节点时,虚树的边权之和的最大值,设 \(siz_u\) 表示以 \(u\) 为根的子树的大小。
转移首先考虑合并 \(u\) 的所有儿子 \(v_1, v_2, v_3, ..., v_c\) ,此时的转移为:
之后考虑选择当前节点 \(u\) ,此时的转移为 \(\max(f_{u, i - 1}, f_{u, i})\to f_{u, i}\) ,由于 \(f_{u, i}\) 随 \(i\) 的增大而增大,因此我们只需要令 \(f_{u, siz_u} = f_{u, siz_u - 1}\) 即可。
显然,当 \(u\) 为叶节点时, \(f_{u, 1} = 0\) 。
之后我们考虑优化,发现上述转移类似闵可夫斯基和,我们不妨猜想 \(f_{u, i}\) 数组是一个上凸包。
首先考虑 \(f_{u, 1}\) 和 \(f_{u, 2}\) ,由于 \(f_{u, 1}\) 一定选择了 \(u\) 子树中与 \(u\) 相距最远的点,因此 \(f_{u, 1}\ge f_{u, 2} - f_{u, 1}\) 。
也就是当 \(n = 2\) 时, \(f_{u, i}\) 数组构成一个上凸包。
那么显然转移时的 \(f_{v_j, x} + l_j\) 也是一个上凸包。
利用数学归纳法,我们得知 \(f_{u, i}\) 一定是一个上凸包。
因此我们考虑用闵可夫斯基和的方法优化,我们首先对凸包差分得到数列:
转移相当于改变了数列首项,令 \(f_{v, 1} + l \to f_{v, 1}\) ,之后对这些凸包进行归并排序,最后在数列结尾插入 \(0\) ,表示 \(f_{u, siz_u} - f_{u, siz_{u} - 1} = 0\) 。
实际上我们不需要维护凸包,只需要维护所有差分值构成的多重集,最后从大到小排序,前缀和即可得到 \(f_{1, i}\) 。
复杂度 \(O(n\log n)\) 。

浙公网安备 33010602011771号