传送门
题意:支持单点修改,维护子树里的最大连通子块和。
思路:
扯皮:
b z o j bzoj bzoj卡常差评。
网上的题解大多用了跟什么最大子段和一样的转移方法。
但是我们实际上是可以用矩阵转移的传统 d d p ddp ddp写法来做这道题的。
由于我推出来矩阵是 3 ∗ 3 3*3 3∗3的因此常数巨大 g g gg gg了,因此蒟蒻博主只能提供思路和一份 T L E TLE TLE的代码。
正题:
一道考虑链分治+ d p dp dp套路题。
同样先考虑静态的版本。
显然可以 f i , 0 / 1 f_{i,0/1} fi,0/1表示以 i i i为根的子树, i i i在/不在最大子块里是的最大子块和是多少。
然后显然有如下两个转移式:
f p , 0 = m a x v ∈ s o n { f v , 0 , f v , 1 } f_{p,0}=max_{v\in son}\{f_{v,0},f_{v,1}\} fp,0=maxv∈son{
fv,0,fv,1}
f p , 1 = v a l i + ∑ v ∈ s o n m a x { f v , 1 , 0 } f_{p,1}=val_i+\sum_{v\in son}max\{f_{v,1},0\} fp,1=vali+∑v∈sonmax{
fv,1,0}。
现在考虑链分治,我们记一个 g i , 0 / 1 g_{i,0/1} gi,0/1表示跟以 i i i为根的子树去掉 i i i的重儿子所在子树之后, i i i在/不在最大子块里时的最大子块和是多少。
考虑推 g g g:
g p , 0 = m a x v ∈ s o n , v ̸ = h s o n { f v , 0 , f v , 1 } g_{p,0}=max_{v\in son,v\not=hson}\{f_{v,0},f_{v,1}\} gp,0=maxv∈son,v̸=hson{
fv,0,fv,1}
g p , 1 = f i , 1 = v a l i + ∑ v ∈ s o n , v ̸ = h s o n m a x { 0 , f v , 1 } g_{p,1}=f_{i,1}=val_i+\sum_{v\in son,v\not=hson}max\{0,f_{v,1}\} gp,1=fi,1=vali+∑v∈son,v̸=