(有任何问题欢迎留言或私聊&&欢迎交流讨论哦

求树的最大独立集,最小点覆盖,最小支配集

三个定义

最大独立集:

 对一个图选出尽量多的点组成一个集合,满足这些点之间没有边相连。所有独立集中,顶点数最多的称作最大独立集。

最小点覆盖:

 对一个图选出尽量少的点组成一个集合,满足图中所有的边均有端点属于这个集合。所有覆盖集中,顶点数最少的称作最小点覆盖。

最小支配集:

 对一个图选出尽量少的点组成一个集合,满足图中剩余的点都和集合中的点有边相连。从集合中出去任何一个点之后若不再是支配集,则此支配集是极小支配集。所有支配集中,顶点数最少的称作最小支配集。


贪心解法

树的最大独立集:

 先求一遍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的更多相关文章

  1. POJ-3659-最小支配集裸题/树形dp

    Cell Phone Network Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7127   Accepted: 254 ...

  2. SPOJ 1479 +SPOJ 666 无向树最小点覆盖 ,第二题要方案数,树形dp

    题意:求一颗无向树的最小点覆盖. 本来一看是最小点覆盖,直接一下敲了二分图求最小割,TLE. 树形DP,叫的这么玄乎,本来是线性DP是线上往前\后推,而树形DP就是在树上,由叶子结点状态向根状态推. ...

  3. 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 ...

  4. 树的点分治 (poj 1741, 1655(树形dp))

    poj 1655:http://poj.org/problem?id=1655 题意: 给无根树,  找出以一节点为根,  使节点最多的树,节点最少. 题解:一道树形dp,先dfs 标记 所有节点的子 ...

  5. POJ3659 Cell Phone Network(树上最小支配集:树型DP)

    题目求一棵树的最小支配数. 支配集,即把图的点分成两个集合,所有非支配集内的点都和支配集内的某一点相邻. 听说即使是二分图,最小支配集的求解也是还没多项式算法的.而树上求最小支配集树型DP就OK了. ...

  6. 【题解】Luogu p2016 战略游戏 (最小点覆盖)

    题目描述 Bob喜欢玩电脑游戏,特别是战略游戏.但是他经常无法找到快速玩过游戏的办法.现在他有个问题. 他要建立一个古城堡,城堡中的路形成一棵树.他要在这棵树的结点上放置最少数目的士兵,使得这些士兵能 ...

  7. HDU 1054 Strategic Game(最小点覆盖+树形dp)

    题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=106048#problem/B 题意:给出一些点相连,找出最小的点数覆盖所有的 ...

  8. Cogs 1632. 搬运工(二分图最小点覆盖)

    搬运工 ★ 输入文件:worker.in 输出文件:worker.out 简单对比 时间限制:1 s 内存限制:256 MB [题目描述] 小涵向小宇推荐了一款小游戏. 游戏是这样的,在一个n*n的地 ...

  9. POJ 3342 Party at Hali-Bula (树形dp 树的最大独立集 判多解 好题)

    Party at Hali-Bula Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 5660   Accepted: 202 ...

随机推荐

  1. HTML5 worker计数器简单示例

    效果图: index.html var w; // 开始 function startWorker() { if (typeof (Worker) !== "undefined") ...

  2. 区间dp+预处理——cf1278F(难题)

    感觉很难的区间dp,主要是状态难想 /* 对于一个区间[i,j],设其最小的颜色编号是c=Min[i,j],那么该区间显然有一大段是以c为底的 设这个颜色在该区间出现位置的两端是L[c],R[c],那 ...

  3. 2-Harris角点检测

    1. 何为角点? 下面有两幅不同视角的图像,通过找出对应的角点进行匹配. 再看下图所示,放大图像的两处角点区域: 我们可以直观的概括下角点所具有的特征: >轮廓之间的交点: >对于同一场景 ...

  4. Dubbo 如何成为连接异构微服务体系的最佳服务开发框架

    从编程开发的角度来说,Apache Dubbo (以下简称 Dubbo)首先是一款 RPC 服务框架,它最大的优势在于提供了面向接口代理的服务编程模型,对开发者屏蔽了底层的远程通信细节.同时 Dubb ...

  5. cdn 链接

    1.jquery    :   http://www.jq22.com/cdn/ 2.常用前端库引用地址  :  http://www.jq22.com/jquery/jquery.html 3.vC ...

  6. SQL中忘记用户登陆密码该如何修改

    1.每个数据库登陆之前都必须先启动它本身的数据服务,SQL数据库也不例外,首先我们要做的是先打开我们的SQL数据服务! 2.随后在我们的开始菜单中找到我们的SQL启动图标,打开即可 3.弹出登录窗体( ...

  7. XMPP的总体架构和Jabber ID

    通常XMPP的架构用C/S来实现,但是也并不是强制的,Client和Server,Server和Server之间通过TCP连接来通信. 架构的简单示意图如下: C1-----S1----S2----C ...

  8. Linux中断机制

    1.中断概念 中断是指在CPU正常运行期间,由于内外部事件或由程序预先安排的事件引起的CPU暂时停止正在运行的程序,转而为该内部或外部事件或预先安排的事件服务的程序中去,服务完毕后再返回去继续运行被暂 ...

  9. msgbox用法

    http://www.w3school.com.cn/vbscript/func_msgbox.asp VBScript MsgBox 函数 VBScript 函数参考手册 定义和用法 MsgBox ...

  10. 20140729 while((*pa++=*pb++)!='\0') 合并数组代码 C++类型转换关键字 封装 多态 继承

    1.关于while((*pa++=*pb++)!='\0')和while((*pa=*pb)!='\0') {pa++;pb++;}的不同 #include<stdio.h> void m ...