扩大
缩小

动态规划进阶

第一类 · 树形动态规划

问题一:求树上最大独立集

题意描述

  有一棵大小为 $n$ 的树,其中有 $n-1$ 组点有连边,请找到大小最大的一个集合,使得树中以编号为集合内元素的节点两两无直接连边。

  $n \le 5000$。

  (简单讲,就是从一棵树内找到尽可能多的点,并且这些点两两没有连边)

算法一(非通过算法)

  我们可以枚举每一个点选或不选,选完了判断是否成立。时间复杂度为 $O(2^n)$,肯定会超时。

算法二(贪心,可通过)

  先把所有叶子节点选入。

  对于每个节点,如果我能确定它选,那么它的父亲就不能选;如果我能确定它不选,那么它的父亲就可以选。

  这样把树上每个节点都标记了 选 / 不选,所有选的点就是一个最大独立集。

 贪心证明:

  如果不选叶子节点,那么选中的父亲节点数量一定不大于叶子结点(一个父节点至少有一个子节点),每一步选的点数比同级贪心做法少。

  所以贪心做法保证了每一步的不劣性

问题二:求树上最大带权独立集

 

posted @ 2020-07-21 19:45  HoshizoraZ  阅读(208)  评论(0)    收藏  举报