洛谷P2899题解

题面

看题目就知道这是一个点覆盖型树形DP。
首先定义状态。设 \(f_i\)\(i\) 节点的状态。
那么, \(f_i\) 有三种情况:

  1. 自己不放置坑爹
  2. 儿子坑了自己。
  3. 儿子全部自给自足,自己不放置,靠儿子养活。

三个状态分别如图所示:
1.png
3.png
4.png

知道状态以后,转移就很简单了。

初始状态:坑爹,因为它的影响范围肯定比自己大。
然后,如果存在一个儿子要坑自己,那就勉为其难切换到状态 \(2\)
最后,如果每个儿子都没坑自己,即每个儿子都被坑了,那么自己靠儿子养活,切换到状态 \(3\)

还有,如果根节点想要坑爹,那是不可能的,所以把它设为状态 \(2\)
最后计算一下有多少个节点是状态 \(2\) 即可。

代码

posted @ 2021-08-13 15:00  1358id  阅读(69)  评论(0编辑  收藏  举报