创世纪
创世纪
首先考虑树的情况。
为了方便,还是将基环树的边反向。
令 \(f[u][0/1]\) 表示当前点不选/选的答案。
- 若当前的点不选,那么其子节点任意,\(\sum\max(f[son][0/1])\)。
- 若当前点选,那么其子节点必定要不选一个,我们可以分类讨论
- 若子结点中有一个点 \(f[0]\ge f[1]\),那么已经满足条件
- 否则,替换一个 \(son\),为了最优,肯定是替换 \(\max f[0]-f[1]\)(注意这个值是负数),损失最小。
然后再来考虑基环树断边的情况。
对于边 \((u,j)\),考虑我们是否用这条边来限制(因为限制来自它的所有子节点)。
- 不用这条边,那么那么直接搞就好了。
- 用这条边,那么 \(j\) 必然选,\(u\) 必然不选,然后 \(j\) 的子节点选不选都无所谓了,因为已经有 \(u\) 的限制。