第一类 · 树形动态规划
问题一:求树上最大独立集
题意描述
有一棵大小为 $n$ 的树,其中有 $n-1$ 组点有连边,请找到大小最大的一个集合,使得树中以编号为集合内元素的节点两两无直接连边。
$n le 5000$。
(简单讲,就是从一棵树内找到尽可能多的点,并且这些点两两没有连边)
算法一(非通过算法)
我们可以枚举每一个点选或不选,选完了判断是否成立。时间复杂度为 $O(2^n)$,肯定会超时。
算法二(贪心,可通过)
先把所有叶子节点选入。
对于每个节点,如果我能确定它选,那么它的父亲就不能选;如果我能确定它不选,那么它的父亲就可以选。
这样把树上每个节点都标记了 选 / 不选,所有选的点就是一个最大独立集。
贪心证明:
如果不选叶子节点,那么选中的父亲节点数量一定不大于叶子结点(一个父节点至少有一个子节点),每一步选的点数比同级贪心做法少。
所以贪心做法保证了每一步的不劣性。