UVA1292-----Strategic game-----树形DP解决树上的最小点覆盖问题
本文出自:http://blog.csdn.net/dr5459
题目地址:
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4038
题目意思:
给你一棵树
要你在树上的一些点上放置士兵,放的节点上面是一个
问你怎样放最少的能使所有的边被照顾到,一个士兵可以同时照顾和他所处节点相连的边
解题思路:
最少点覆盖问题
可以用树形DP解决
我们把无根树抽象成一棵有根树,0为树根
对于任意一个节点i来说,设dp[i][0]表示在该节点不放士兵
dp[i][1]表示在该节点放置士兵
那么结合他的子节点就可以得到状态转移方程
dp[i][1] = sum(dp[k][0])+1 k为i的子节点,下同,因为本节点没放,则子节点一定要放
dp[i][0] = sum( min(dp[k][0],dp[k][1]) ) 因为本节点放了,所以取子节点放和不放的最小值
最后答案就是min( dp[0][0] ,dp[0][1] )
虽然是一道很简单的树形DP,但是对与学习树形DP很有启发意义
下面上代码:
#include<iostream>
#include<vector>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;const int maxn = 1600;
int dp[maxn][2];
int n;
vector<int> tree[maxn];int min(int a,int b)
{return a<b?a:b;
}void dfs(int fa,int now)
{dp[now][0] = 0;dp[now][1] = 1;int len = tree[now].size();int i;for(i=0;i<len;i++){int t=tree[now][i];if(t!=fa){dfs(now,t);dp[now][0] += dp[t][1];dp[now][1] += min(dp[t][0],dp[t][1]);}}}int main()
{while(~scanf("%d",&n)){int i;for(i=0;i<n;i++){tree[i].clear();}for(i=0;i<n;i++){int b;int a;int j;scanf("%d:(%d)",&a,&b);for(j=0;j<b;j++){int x;scanf("%d",&x);tree[a].push_back(x);tree[x].push_back(a);}}dfs(-1,0);cout<<min(dp[0][0],dp[0][1])<<endl;}return 0;
}
UVA1292-----Strategic game-----树形DP解决树上的最小点覆盖问题相关推荐
- bzoj 1917: [Ctsc2010]星际旅行 树形dp解决树上网络流
如果把限制看做流量上界,那么答案相当于从根节点1到树上所有点的最大流. 由于有Hi>=i的度数,那么可以想象在最坏情况下(比如所有Hi=i的度数),答案至少是根节点走过所有点之后回到根节点,然后 ...
- [XSY] 绿色(圆方树、树形DP、树上差分)
绿色 题意简述 题解 首先,每次修改完点权后,重新考虑一遍所有路径显然是不现实的,所以我们考虑求出经过每个点的两端同色的简单路径数,这样权值和容易统计和修改. 接下来分析仙人掌上的简单路径性质.一条简 ...
- BZOJ 2133 切割(树形DP,树上背包)大概是本题全网第一篇题解 >_<【BZOJ 修复工程】
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 BZOJ 2133 切割这道题全网搜不到任何一篇题解 >_< 看评测记录也没有几个人AC- ...
- 洛谷:P4516 [JSOI2018] 潜入行动(树形dp、树上分组背包统计方案数)
潜入行动 题意: 在树上每个点可以放置监控设备,监控该点周围的点(不包括该点),问刚好放置 k 个监控设备监控使得整棵树所有点都被监控的方案数是多少. 思路: 显然是个树形dp,k个监控自然联想分组背 ...
- pku 1463 Strategic game 树形DP
http://poj.org/problem?id=1463 对于树形DP不大来感啊,才开始做的时候考虑成覆盖全部点了,致使我拓扑做了,WA了好几次.感觉是树形DP好像以前做过类似的题目可是就是想不出 ...
- 树形DP求树的最小支配集,最小点覆盖,最大独立集
转自:https://www.cnblogs.com/Ash-ly/p/5783877.html 一:最小支配集 考虑最小支配集,每个点有两种状态,即属于支配集合或者不属于支配集合,其中不属于支配集合 ...
- cf 1060e 树形dp 树上任意两点的距离和
题意: 给出一个树,把树上任意两个相隔一个点的点加一条边,问加完边之后任意两点的距离和是多少. 参考博客 :https://blog.csdn.net/Mr_Treeeee/article/det ...
- CodeForces - 856B Similar Words(AC自动机+树形dp)
题目链接:点击查看 题目大意:给出一个大小为 n 的字符串集记为 X,给出两个字符串相似的定义为:如果某个字符串去掉首字母可以得到另一个字符串 现在需要构造一个尽可能大的字符串集,满足以下两个条件: ...
- 【HDU - 1520】Anniversary party (树形dp)
题干: There is going to be a party to celebrate the 80-th Anniversary of the Ural State University. Th ...
- 最小支配集,最小点覆盖,最大独立集(贪心/DP)
最小支配集(minimal dominating set):对于图G=(V,E)来说,设V'是图G的一个支配集,则对于图中的任意一个顶点u,要么属于集合V',要么与V'中的顶点相连. 在V'中除去任何 ...
最新文章
- 最小化局部边际的合并聚类算法(中篇)
- 驰骋工作流程引擎,ccflow,如何把子线程的数据汇总到合流节点表单中去?
- oracle账号区分大小写吗,实战Oracle 11g用户密码不区分大小写
- 【EOJ Monthly 2018.10 - B】 莫干山奇遇 (思维构造,数学,数组,贪心)(总结)
- 看故事学知识,这篇Java代理的文章妙啊!
- Ajax表格控件实现
- Hue使用之Inceptor篇
- YQMKPAT(CAD图案填充插件)v2.1绿色版
- 查询任意汉字的Unicode编码,UTF8编码,GB2312编码,GBK编码
- android 教程 百度云盘,【从零教程】带你从零编写自己的在线百度云盘 11-21更新...
- Koo叔说Shader—Shader简介
- ORB特征点提取与均匀化——ORBSLAM2源码讲解(一)
- 坚持并活下去!cxuan 在 CSDN 的 2020 年终总结。
- CentOS7 Linux引导修复
- 管桩的弹性模量计算公式_弹性模量法测定桩身应力分析
- Excel中插入函数工具的使用技巧
- 关于Android Studio中点9图的编译错误问题:Some file crunching failed
- 【51单片机 】定时器的初始值计算 详解
- Doris集成cloudera Manager
- Docker(一) 入门
热门文章
- Atitit ever note org log t99 目录 1. data	1 2. Sik dsk zip mode	1 3. Local exted stat	2 4. Recy	3 1
- Atitit 项目的主体设计与结构文档 v3
- atitit.React 优缺点 相比angular react是最靠谱的web ui组件化方案了
- paip.c++ tree parse tpath解析器
- paip.WEB乱码的解决流程
- Gartner数据:RPA以75.6%增长率成2019年Q1增速最快的企业级软件(附全球十大RPA市场数据)
- (转)FOF资产配置管理系统CBAAS
- 常用内存数据库介绍(一)
- 哈曼基于英特尔计算平台(Apollo Lake和ACRN)展示新一代“智能驾驶舱”
- 【飞行器】基于matlab GUI四旋翼飞行器飞行模拟【含Matlab源码 1183期】