创世纪

发布时间 2023-07-31 10:58:53作者: wscqwq

创世纪

首先考虑树的情况。

为了方便,还是将基环树的边反向。

\(f[u][0/1]\) 表示当前点不选/选的答案。

  1. 若当前的点不选,那么其子节点任意,\(\sum\max(f[son][0/1])\)
  2. 若当前点选,那么其子节点必定要不选一个,我们可以分类讨论
    • 若子结点中有一个点 \(f[0]\ge f[1]\),那么已经满足条件
    • 否则,替换一个 \(son\),为了最优,肯定是替换 \(\max f[0]-f[1]\)(注意这个值是负数),损失最小。

然后再来考虑基环树断边的情况。

image-20230731105157346

对于边 \((u,j)\),考虑我们是否用这条边来限制(因为限制来自它的所有子节点)。

  1. 不用这条边,那么那么直接搞就好了。
  2. 用这条边,那么 \(j\) 必然选,\(u\) 必然不选,然后 \(j\) 的子节点选不选都无所谓了,因为已经有 \(u\) 的限制。

AC