求树的最大独立集,最小点覆盖,最小支配集 贪心and树形dp
(有任何问题欢迎留言或私聊&&欢迎交流讨论哦
求树的最大独立集,最小点覆盖,最小支配集
三个定义
最大独立集:
对一个图选出尽量多的点组成一个集合,满足这些点之间没有边相连。所有独立集中,顶点数最多的称作最大独立集。
最小点覆盖:
对一个图选出尽量少的点组成一个集合,满足图中所有的边均有端点属于这个集合。所有覆盖集中,顶点数最少的称作最小点覆盖。
最小支配集:
对一个图选出尽量少的点组成一个集合,满足图中剩余的点都和集合中的点有边相连。从集合中出去任何一个点之后若不再是支配集,则此支配集是极小支配集。所有支配集中,顶点数最少的称作最小支配集。
贪心解法
树的最大独立集:
先求一遍dfs序,倒序遍历。若此节点未被标记,则将此端点加入独立集,并标记此节点和其父节点。
树的最小点覆盖:
先求一遍dfs序,倒序遍历。若此节点及其父节点均未被标记,则将其父节点加入覆盖集,并标记此节点及其父节点。
树的最小支配集:
先求一遍dfs序,倒序遍历。若此节点未被标记,把其父节点加入支配集(前提是它不在支配集中),然后标记此节点,父节点及其爷爷节点。
树形DP解法
树的最大独立集:
\(dp[i][0]\)表示点i在独立集中;\(dp[i][1]\)表示点i不在独立集中
\[
dp[u][0] = 1 + \sum dp[v][1];\\
dp[u][1] = \sum max(dp[v][0], dp[v][1]);
\]
树的最小点覆盖:
\(dp[i][0]\)表示点i在点覆盖集中;\(dp[i][1]\)表示点i不在点覆盖集中
\[
dp[u][0] = 1 + \sum min(dp[v][0], dp[v][1]);\\
dp[u][1] = \sum dp[v][0];
\]
树的最小支配集:
\(dp[i][0]\)表示点i属于支配集,并且以点i为根的子树都被覆盖了的情况下支配集中所包含最少点的个数
\(dp[i][1]\)表示点i不属于支配集合,且以i为根的子树都被覆盖,且i被其中不少于一个子节点覆盖的情况下支配集所包含最少点的个数
\(dp[i][2]\)表示点i不属于支配集合,且以i为根的子树都被覆盖,且i没被子节点覆盖的情况下支配集中所包含最少点的个数.即i将被父节点覆盖
\[
dp[u][0] = 1 + \sum min(dp[v][0],dp[v][1],dp[v][2]);\\
dp[u][2] = \sum dp[v][1];dp[u][2]=min(dp[u][2],INF);\\
if(dp[v][0]<=dp[v][1]) inc = 0;(if\;0\;always\;0)\\
else\;inc = min(inc, dp[v][0]-dp[v][1]);\\
if(u\;no\;son)dp[u][1] = INF;\\
else\; dp[u][1] = \sum min(dp[v][0],dp[v][1])+inc;
\]
参考博文:Ash-ly
求树的最大独立集,最小点覆盖,最小支配集 贪心and树形dp的更多相关文章
- POJ-3659-最小支配集裸题/树形dp
Cell Phone Network Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7127 Accepted: 254 ...
- SPOJ 1479 +SPOJ 666 无向树最小点覆盖 ,第二题要方案数,树形dp
题意:求一颗无向树的最小点覆盖. 本来一看是最小点覆盖,直接一下敲了二分图求最小割,TLE. 树形DP,叫的这么玄乎,本来是线性DP是线上往前\后推,而树形DP就是在树上,由叶子结点状态向根状态推. ...
- poj-3659 Cell Phone Network(最小支配集+贪心)
http://poj.org/problem?id=3659 Description Farmer John has decided to give each of his cows a cell p ...
- 树的点分治 (poj 1741, 1655(树形dp))
poj 1655:http://poj.org/problem?id=1655 题意: 给无根树, 找出以一节点为根, 使节点最多的树,节点最少. 题解:一道树形dp,先dfs 标记 所有节点的子 ...
- POJ3659 Cell Phone Network(树上最小支配集:树型DP)
题目求一棵树的最小支配数. 支配集,即把图的点分成两个集合,所有非支配集内的点都和支配集内的某一点相邻. 听说即使是二分图,最小支配集的求解也是还没多项式算法的.而树上求最小支配集树型DP就OK了. ...
- 【题解】Luogu p2016 战略游戏 (最小点覆盖)
题目描述 Bob喜欢玩电脑游戏,特别是战略游戏.但是他经常无法找到快速玩过游戏的办法.现在他有个问题. 他要建立一个古城堡,城堡中的路形成一棵树.他要在这棵树的结点上放置最少数目的士兵,使得这些士兵能 ...
- HDU 1054 Strategic Game(最小点覆盖+树形dp)
题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=106048#problem/B 题意:给出一些点相连,找出最小的点数覆盖所有的 ...
- Cogs 1632. 搬运工(二分图最小点覆盖)
搬运工 ★ 输入文件:worker.in 输出文件:worker.out 简单对比 时间限制:1 s 内存限制:256 MB [题目描述] 小涵向小宇推荐了一款小游戏. 游戏是这样的,在一个n*n的地 ...
- POJ 3342 Party at Hali-Bula (树形dp 树的最大独立集 判多解 好题)
Party at Hali-Bula Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 5660 Accepted: 202 ...
随机推荐
- Magento笔记/记录(1)
1.Magento eav_attribute表中source如何指定自定义数据来源 如果你引用的类名为yebihai_usermanage_model_entity_school你必须完整的给出地 ...
- vue基础二
1.vue实例 每个 Vue.js 应用都是通过构造函数 Vue 创建一个 Vue 的根实例 启动的.在实例化 Vue 时,需要传入一个选项对象,它可以包含数据.模板.挂载元素.方法.生命周期钩子等选 ...
- 用javascript插入<style>样式
function addCSS(cssText){ var style = document.createElement('style'), //创建一个style元素 head = document ...
- delphi 文件操作(信息获取)
delphi获取Exe文件版本信息的函数 Type TFileVersionInfo = Record FixedInfo:TVSFixedFileInfo; {版本信息} CompanyName:S ...
- css选择器的分类及优先级计算方法总结
首先声明一下CSS三大特性—— 继承. 优先级和层叠.继承即子类元素继承父类的样式;优先级是指不同类别样式的权重比较;层叠是说当数量相同时,通过层叠(后者覆盖前者)的样式. css选择符分类 首先来看 ...
- Flink 配置文件详解
前面文章我们已经知道 Flink 是什么东西了,安装好 Flink 后,我们再来看下安装路径下的配置文件吧. 安装目录下主要有 flink-conf.yaml 配置.日志的配置文件.zk 配置.Fli ...
- PAT_A1050#String Subtraction
Source: PAT A1050 String Subtraction (20 分) Description: Given two strings S1 and S2, S=S1− ...
- Spring 学习笔记 Resource 资源
Spring Resources 概述 在日常程序开发中,处理外部资源是很繁琐的事情,我们可能需要处理 URL 资源.File 资源.ClassPath相关资源等等.并且在 java 中 Java . ...
- ImsConference.java中会议成员更新处理详解
public class ConferenceParticipant implements Parcelable { //自定义数据结构 private static final String ANO ...
- VC++ 2010 创建高级Ribbon界面详解(1)
运用 VC++ 2010 创建高级 Ribbon 界面详解,包括 Ribbon 界面的结构层次.Ribbon 控件的使用等,ribbon 用户界面,ribbon interface ,ribbon 高 ...