POJ3659 Cell Phone Network(树上最小支配集:树型DP)
题目求一棵树的最小支配数。
支配集,即把图的点分成两个集合,所有非支配集内的点都和支配集内的某一点相邻。
听说即使是二分图,最小支配集的求解也是还没多项式算法的。而树上求最小支配集树型DP就OK了。
树上的每个结点作为其子树的根可以有三个状态:
- 不属于支配集且还没被支配
- 不属于支配集但被其孩子支配
- 属于支配集
那么就是用dp[u][1\2\3]来作为动归的状态,表示结点u为根子树的且u状态为1、2、3的最小支配数。
123转移该怎么转移就怎么转移。。最后的结果就是min(dp[root][2],dp[root][3])。
要注意的是对于有些结点前2个状态可能是不存在的,比如叶子结点不存在第2个状态、存在孩子是叶子结点的结点不存在第1个状态,这些不存在的状态要在转移的时候处理。
- #include<cstdio>
- #include<cstring>
- #include<algorithm>
- using namespace std;
- #define INF 123456
- #define MAXN 111111
- struct Edge{
- int u,v,next;
- }edge[MAXN<<];
- int NE,head[MAXN];
- void addEdge(int u,int v){
- edge[NE].u=u; edge[NE].v=v; edge[NE].next=head[u];
- head[u]=NE++;
- }
- int d[MAXN][];
- int dp(int u,int k,int fa){
- if(d[u][k]!=-) return d[u][k];
- int res=,diff=INF; bool flag=,isLeaf=;
- for(int i=head[u]; i!=-; i=edge[i].next){
- int v=edge[i].v;
- if(v==fa) continue;
- isLeaf=;
- if(k==){
- if(dp(v,,u)==INF) return d[u][k]=INF;
- res+=dp(v,,u);
- }else if(k==){
- if(dp(v,,u)<=dp(v,,u)){
- res+=dp(v,,u);
- flag=;
- }else{
- if(dp(v,,u)==INF) return d[u][k]=INF;
- res+=dp(v,,u);
- diff=min(diff,dp(v,,u)-dp(v,,u));
- }
- }else{
- res+=min(min(dp(v,,u),dp(v,,u)),dp(v,,u));
- }
- }
- if(k== && isLeaf) return d[u][k]=INF;
- if(k== && !flag) res+=diff;
- return d[u][k]=res+(k==);
- }
- int main(){
- int n,a,b;
- scanf("%d",&n);
- NE=;
- memset(head,-,sizeof(head));
- for(int i=; i<n; ++i){
- scanf("%d%d",&a,&b);
- addEdge(a,b); addEdge(b,a);
- }
- memset(d,-,sizeof(head));
- printf("%d",min(dp(,,),dp(,,)));
- return ;
- }
POJ3659 Cell Phone Network(树上最小支配集:树型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 3659 Cell Phone Network / HUST 1036 Cell Phone Network(最小支配集,树型动态规划,贪心)-动态规划做法
POJ 3659 Cell Phone Network / HUST 1036 Cell Phone Network(最小支配集,树型动态规划,贪心) Description Farmer John ...
- POJ 3659 Cell Phone Network(树的最小支配集)(贪心)
Cell Phone Network Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6781 Accepted: 242 ...
- POJ 3398 Perfect Service(树型动态规划,最小支配集)
POJ 3398 Perfect Service(树型动态规划,最小支配集) Description A network is composed of N computers connected by ...
- 树的问题小结(最小生成树、次小生成树、最小树形图、LCA、最小支配集、最小点覆盖、最大独立集)
树的定义:连通无回路的无向图是一棵树. 有关树的问题: 1.最小生成树. 2.次小生成树. 3.有向图的最小树形图. 4.LCA(树上两点的最近公共祖先). 5.树的最小支配集.最小点覆盖.最大独立集 ...
- POJ 3398 Perfect Service --最小支配集
题目链接:http://poj.org/problem?id=3398 这题可以用两种上述讲的两种算法解:http://www.cnblogs.com/whatbeg/p/3776612.html 第 ...
- 求解任意图的最小支配集(Minimun Dominating Set)
给定一个无向图G =(V,E),其中V表示图中顶点集合,E表示边的集合.G的最小控制顶点集合为V的一个子集S∈V:假设集合R表示V排除集合S后剩余顶点集合,即R∩S=∅,R∪S=V:则最小控制顶点集合 ...
- 树形DP求树的最小支配集,最小点覆盖,最大独立集
一:最小支配集 考虑最小支配集,每个点有两种状态,即属于支配集合或者不属于支配集合,其中不属于支配集合时此点还需要被覆盖,被覆盖也有两种状态,即被子节点覆盖或者被父节点覆盖.总结起来就是三种状态,现对 ...
- 树形DP 树的最小支配集,最小点覆盖与最大独立集
最小支配集: 从V中选取尽量少的点组成一个集合,让V中剩余的点都与取出来的点有边相连. (点) 最小点覆盖: 从V中选取尽量少的点组成一个集合V1,让所有边(u,v)中要么u属于V1,要么v属于V1 ...
随机推荐
- [Effective JavaScript 笔记]第54条:将undefined看做“没有值”
undefined值很特殊,每当js无法提供具体的值时,就会产生undefined. undefined值场景 未赋值的变量的初始值即为undefined. var x; x;//undefined ...
- cocos2d::Vector
C++中的vector使用范例 一.概述 vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector是一个容器,它能够存放各种类型的对象,简 ...
- 【Hibernate】Hibernate系列1之概述
概述 Hibernate简介 1.2.安装hibernate tools插件 1.3.HelloWorld示例 1.3.1.加入jar包 1.3.2.开发步骤 hibernate generator ...
- TexBox的属性
允许多行输入
- 对 Linux 新手非常有用的 20 个命令
参考:http://www.oschina.net/translate/useful-linux-commands-for-newbies 英文原文:http://www.tecmint.com/us ...
- iOS 保存CGRect,CGPoint到NSArray'的方法
由于CGRect和CGPoint等对象是Struct,即结构体,不是继承于NSObject的,所以需要先用NSValue的方法,把他们转化成NSValue对象,之后就可以存入NSArray了! @in ...
- codeforces A. Domino 解题报告
题目链接:http://codeforces.com/problemset/problem/353/A 题目意思:通俗地说,就是当上下两半的数的总和不完全是偶数时,通过上下调换某些骨牌来使这两半的数和 ...
- Lubuntu下配置Python开发环境
安装完系统必须要做的几件事: 一.更新软件 (如果是通过最新版镜像安装,可无视此步骤) 1.选择速度比较快的源,默认的源速度不一定快.二.配置终端 1.设置终端背景,前景色,透明度 ...
- SPI的通信试验 --verilog (从机-全双工)
SPI的 有关知识参考FPGA作为主机的通信实验. 本实验中FPGA作为从机通过SPI与MCU等通信的试验,可以在时钟上升沿接收数据并且在时钟下降沿发送数据,模仿全双工模式.接收的 数据作为地址,通过 ...
- Luci中cbi控件类型总结
转自:http://blog.chinaunix.net/uid-28413840-id-4654479. 名称 描述 继承自 模板 NamedSection A fixed configuratio ...