CF1303G(点分治+李超线段树)

Posted hs-black

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CF1303G(点分治+李超线段树)相关的知识,希望对你有一定的参考价值。

CF1303G(点分治+李超线段树)

题目大意

给你一棵 n 个点的带点权的树,你需要求出树上的一个路径 (x_1,x_2,ldots,x_k,最大化 sum_{i=1}^kia_{x_i}),求最大权值。

数据范围

(2le nle 150000)

一条最大的路径并不好考虑如何直接求得, 我们试图把它用两条路径来合并

把一条过点(x_k)的路径(x_1, x_2, x_3cdots x_{k-1},x_k ,x_{k+1}cdots x_n) 看成两条

(x_1, x_2, x_3cdots x_{k-1}) 权值为(V_1) 长度为(l_1), 和为(S_1)

(x_k ,x_{k+1}cdots x_n) (V_2, l_2, S_2)

那么(V=V_1+V_2 + S_2*l_1)

既然是可(O(1))合并的, 又不难枚举, 可以想到用点分治来枚举中间点

但我们可能要和一堆路径合并, 怎么找到对于我手中已经有的一段路径找到另一条和它权值和拼起来最大的路径呢?

观察发现, 想一次函数, 把(l_1)看做(x), S看做k, 那就是找到一个一次函数 (y = S_2 * x + V_2), 使(x = l_1)最大吗, 这个可以用李超线段树做

以上是关于CF1303G(点分治+李超线段树)的主要内容,如果未能解决你的问题,请参考以下文章

CF1303G Sum of Prefix Sums[李超树,点分治]

CF932F(李超线段树+dp)

CF938G Shortest Path Queries (线段树分治)

线段树分治

bzoj3165 segment 超哥线段树

[CodeChef - STREETTA] The Street 李超线段树