考虑删除树上一条边 \((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\) ,此时的转移为:
\[f_{u, i} = \max_{x_1 + x_2 + ... + x_c = i}(\sum_{j = 1}^{c}\begin{cases} 0&x_j = 0 \\ f_{v_j, x_j} + l_j&1\le x_j\le siz_{v_j}\end{cases}) \]之后考虑选择当前节点 \(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}, f_{v, 2} - f_{v, 1}, ..., f_{v, siz_v} - f_{v, siz_v - 1} \]转移相当于改变了数列首项,令 \(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)\) 。
标签:转移,...,far,siz,possible,凸包,考虑,ABC369G,节点 From: https://www.cnblogs.com/KafuuChinocpp/p/18395283