bzoj5210: 最大连通子块和(链分治+ddp)

这篇博客介绍了如何解决单点修改并维护子树内最大连通子块和的问题。作者提出了使用链分治结合动态规划(DDP)的方法,并分析了3x3矩阵转移的思路,但由于常数过大导致TLE。文章包括静态版本的DP状态设计以及链分治中如何更新状态的讨论,最后提供了部分代码实现。
摘要由CSDN通过智能技术生成

传送门
题意:支持单点修改,维护子树里的最大连通子块和。


思路:

扯皮:

b z o j bzoj bzoj卡常差评。
网上的题解大多用了跟什么最大子段和一样的转移方法。
但是我们实际上是可以用矩阵转移的传统 d d p ddp ddp写法来做这道题的。
由于我推出来矩阵是 3 ∗ 3 3*3 33的因此常数巨大 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=maxvson{ 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+vsonmax{ 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=maxvson,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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值