P4292 - 重建计划 题解

这是个淀粉质界的题,但是由于长剖题少,淀粉质题多,这题就用长剖水过去吧!

首先发现这是个 01 分数规划,考虑二分答案 \(x\),得到 \(\sum(v(e)-x)\geq 0\)。也就是说我们需要找一条长度 \(\leq [L,R]\)\(v-x\) 的和最大的路径。这个是淀粉质的事,但是长剖也是可以做的。

我们考虑计算 \(\forall x\),以 \(x\) 为 LCA 的这样的路径中的最大边权和。那么一条路径是这样的路径,当且仅当左右两边挂在 \(x\) 的两个不同的儿子子树,并且左右两边的长度之和 \(\leq [L,R]\)

我们考虑对 \(x\) 如何暴力算。那就维护所有深度的最大前缀和,扫一遍儿子序列,对于每个儿子,先把儿子子树内的全部节点给贡献答案(具体如何贡献,显然另一边符合条件的深度是一个区间,于是用线段树维护所有深度的最大前缀和,区间查询即可),然后更新线段树,是一些单点更新。这样是线对的。

这个显然是可以 dsu on tree 优化的。进一步,一个点处的信息量只与深度相关(维护同一深度的最大前缀和),可以长剖做到整体线对。那么带上二分就是线性二次对数。

code(要开 O2)

posted @ 2021-02-02 16:53  ycx060617  阅读(75)  评论(0编辑  收藏  举报