zoukankan      html  css  js  c++  java
  • 动态规划进阶

    第一类 · 树形动态规划

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

    题意描述

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

      $n le 5000$。

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

    算法一(非通过算法)

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

    算法二(贪心,可通过)

      先把所有叶子节点选入。

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

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

     贪心证明:

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

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

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

  • 相关阅读:
    java 输出质数
    各大OJ
    使用css让图片居中
    poj 1250 Tanning Salon
    Struts2 中整合DWR3实现文件上传
    C语言I博客作业02
    The first essay.
    tar命令
    wBox Demo
    缓存记录
  • 原文地址:https://www.cnblogs.com/zengpeichen/p/13357045.html
Copyright © 2011-2022 走看看