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)

珍爱生命,远离抄袭!
原文地址:https://www.cnblogs.com/ycx-akioi/p/solution-p4292.html