1>保卫王国
一棵树,有点权,
树上一条边上要求至少一个点被选,
现在有好多个询问,要求一个点被选,或者没有被选
求问每个询问的最小代价
(1)很明显的树形dp,
简单的暴力,对每次询问,求一次dp,用dfs
复杂度O(nm)
前11个点,44分
(2)优化dp
因为m优化不得,离线也没什么用,
所以,估计最终的复杂度应该是O(mlogn)
再画一棵树,发现每次影响的其实只有x到y这一段中的dp,
(当然相邻节点有一点...影响)
我们把要更新的部分分成三部分:
设两个点为u,v,t=LCA(u,v)
三部分为:
1.从u到t
2.从v到t
3.从t到root
设f[0/1][0/1][i][u ]表示u不选/选,u往上跳2^i步的祖先不选/选时,从u开始dp到那个祖先的答案。
(倍增维护)
原文地址:https://www.cnblogs.com/xwww666666/p/11623712.html
时间: 2024-10-13 10:24:57