[倍增][换根DP]luogu P5024 保卫王国
题面
https://www.luogu.com.cn/problem/P5024
分析
可以对有限制的点对之间的链进行在倍增上的DP数组合并。
需要通过一次正向树形DP和一次换根DP得到g[0][i][0/1]表示以i为根的子树中i为0/1的最小代价和g[1][i][0/1]表示整棵树除了以i为根的子树i为0/1的最小代价。
然后倍增数组上减去儿子方向的DP值进行预处理。倍增数组f[i][0/1][0/1][j]表示i向上跳$2^{j}$ 次,i的状态为0/1,跳到的祖先的状态为0/1的DP值。
最后做LCA时统计即可,对于不是互为祖孙的情况,需要讨论lca和其两个儿子的状态取最小值。
代码
在日渐沉没的世界里,我发现了你。