洛谷P2899题解
看题目就知道这是一个点覆盖型树形DP。
首先定义状态。设 \(f_i\) 为 \(i\) 节点的状态。
那么, \(f_i\) 有三种情况:
- 自己不放置
坑爹。 - 儿子坑了自己。
- 儿子全部自给自足,自己不放置,靠儿子养活。
三个状态分别如图所示:
知道状态以后,转移就很简单了。
初始状态:坑爹,因为它的影响范围肯定比自己大。
然后,如果存在一个儿子要坑自己,那就勉为其难切换到状态 \(2\) 。
最后,如果每个儿子都没坑自己,即每个儿子都被坑了,那么自己靠儿子养活,切换到状态 \(3\) 。
还有,如果根节点想要坑爹,那是不可能的,所以把它设为状态 \(2\) 。
最后计算一下有多少个节点是状态 \(2\) 即可。