本文出自: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解决树上的最小点覆盖问题相关推荐

  1. bzoj 1917: [Ctsc2010]星际旅行 树形dp解决树上网络流

    如果把限制看做流量上界,那么答案相当于从根节点1到树上所有点的最大流. 由于有Hi>=i的度数,那么可以想象在最坏情况下(比如所有Hi=i的度数),答案至少是根节点走过所有点之后回到根节点,然后 ...

  2. [XSY] 绿色(圆方树、树形DP、树上差分)

    绿色 题意简述 题解 首先,每次修改完点权后,重新考虑一遍所有路径显然是不现实的,所以我们考虑求出经过每个点的两端同色的简单路径数,这样权值和容易统计和修改. 接下来分析仙人掌上的简单路径性质.一条简 ...

  3. BZOJ 2133 切割(树形DP,树上背包)大概是本题全网第一篇题解 >_<【BZOJ 修复工程】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 BZOJ 2133 切割这道题全网搜不到任何一篇题解 >_< 看评测记录也没有几个人AC- ...

  4. 洛谷:P4516 [JSOI2018] 潜入行动(树形dp、树上分组背包统计方案数)

    潜入行动 题意: 在树上每个点可以放置监控设备,监控该点周围的点(不包括该点),问刚好放置 k 个监控设备监控使得整棵树所有点都被监控的方案数是多少. 思路: 显然是个树形dp,k个监控自然联想分组背 ...

  5. pku 1463 Strategic game 树形DP

    http://poj.org/problem?id=1463 对于树形DP不大来感啊,才开始做的时候考虑成覆盖全部点了,致使我拓扑做了,WA了好几次.感觉是树形DP好像以前做过类似的题目可是就是想不出 ...

  6. 树形DP求树的最小支配集,最小点覆盖,最大独立集

    转自:https://www.cnblogs.com/Ash-ly/p/5783877.html 一:最小支配集 考虑最小支配集,每个点有两种状态,即属于支配集合或者不属于支配集合,其中不属于支配集合 ...

  7. cf 1060e 树形dp 树上任意两点的距离和

    题意: 给出一个树,把树上任意两个相隔一个点的点加一条边,问加完边之后任意两点的距离和是多少.   参考博客 :https://blog.csdn.net/Mr_Treeeee/article/det ...

  8. CodeForces - 856B Similar Words(AC自动机+树形dp)

    题目链接:点击查看 题目大意:给出一个大小为 n 的字符串集记为 X,给出两个字符串相似的定义为:如果某个字符串去掉首字母可以得到另一个字符串 现在需要构造一个尽可能大的字符串集,满足以下两个条件: ...

  9. 【HDU - 1520】Anniversary party (树形dp)

    题干: There is going to be a party to celebrate the 80-th Anniversary of the Ural State University. Th ...

  10. 最小支配集,最小点覆盖,最大独立集(贪心/DP)

    最小支配集(minimal dominating set):对于图G=(V,E)来说,设V'是图G的一个支配集,则对于图中的任意一个顶点u,要么属于集合V',要么与V'中的顶点相连. 在V'中除去任何 ...

最新文章

  1. 最小化局部边际的合并聚类算法(中篇)
  2. 驰骋工作流程引擎,ccflow,如何把子线程的数据汇总到合流节点表单中去?
  3. oracle账号区分大小写吗,实战Oracle 11g用户密码不区分大小写
  4. 【EOJ Monthly 2018.10 - B】 莫干山奇遇 (思维构造,数学,数组,贪心)(总结)
  5. 看故事学知识,这篇Java代理的文章妙啊!
  6. Ajax表格控件实现
  7. Hue使用之Inceptor篇
  8. YQMKPAT(CAD图案填充插件)v2.1绿色版
  9. 查询任意汉字的Unicode编码,UTF8编码,GB2312编码,GBK编码
  10. android 教程 百度云盘,【从零教程】带你从零编写自己的在线百度云盘 11-21更新...
  11. Koo叔说Shader—Shader简介
  12. ORB特征点提取与均匀化——ORBSLAM2源码讲解(一)
  13. 坚持并活下去!cxuan 在 CSDN 的 2020 年终总结。
  14. CentOS7 Linux引导修复
  15. 管桩的弹性模量计算公式_弹性模量法测定桩身应力分析
  16. Excel中插入函数工具的使用技巧
  17. 关于Android Studio中点9图的编译错误问题:Some file crunching failed
  18. 【51单片机 】定时器的初始值计算 详解
  19. Doris集成cloudera Manager
  20. Docker(一) 入门

热门文章

  1. Atitit ever note org log t99 目录 1. data 1 2. Sik dsk zip mode 1 3. Local exted stat 2 4. Recy 3 1
  2. Atitit 项目的主体设计与结构文档 v3
  3. atitit.React   优缺点 相比angular react是最靠谱的web ui组件化方案了
  4. paip.c++ tree parse tpath解析器
  5. paip.WEB乱码的解决流程
  6. Gartner数据:RPA以75.6%增长率成2019年Q1增速最快的企业级软件(附全球十大RPA市场数据)
  7. (转)FOF资产配置管理系统CBAAS
  8. 常用内存数据库介绍(一)
  9. 哈曼基于英特尔计算平台(Apollo Lake和ACRN)展示新一代“智能驾驶舱”
  10. 【飞行器】基于matlab GUI四旋翼飞行器飞行模拟【含Matlab源码 1183期】