【考试】10.2

1>保卫王国

 

一棵树,有点权,

树上一条边上要求至少一个点被选,

现在有好多个询问,要求一个点被选,或者没有被选

求问每个询问的最小代价

【考试】10.2_第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到那个祖先的答案。

(倍增维护)

 

你可能感兴趣的:(【考试】10.2)