首先我们如果能预处理出dp[x][j]表示x子树内分配j个人最大获益,然后每次询问O(m)的循环一下,还需要知道在链上某一个点分配m-j个人的最大获益,我们发现这个东西可以放在线段树上树剖来维护。但是有修改的话我们预处理的那个dp数组就gg了,怎么办呢qaq 我们发现其实这个dp数组也可以直接在线段树上维护!每次线段树信息合并时背包dp合并一下即可,复杂度 O(m2) O ( m 2 )
因此总的复杂度就是 O(nlognm
bzoj2164 采矿(树形背包dp+线段树优化+链剖)
最新推荐文章于 2024-08-01 21:27:39 发布