洛谷 2016 战略游戏(树形DP)
时间:2022-07-28
本文章向大家介绍洛谷 2016 战略游戏(树形DP),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题目描述
Bob喜欢玩电脑游戏,特别是战略游戏。但是他经常无法找到快速玩过游戏的办法。现在他有个问题。
他要建立一个古城堡,城堡中的路形成一棵树。他要在这棵树的结点上放置最少数目的士兵,使得这些士兵能了望到所有的路。
注意,某个士兵在一个结点上时,与该结点相连的所有边将都可以被了望到。
请你编一程序,给定一树,帮Bob计算出他需要放置最少的士兵.
输入格式
第一行 N,表示树中结点的数目。
第二行至第N+1行,每行描述每个结点信息,依次为:该结点标号i,k(后面有k条边与结点I相连)。
接下来k个数,分别是每条边的另一个结点标号r1,r2,...,rk。
对于一个n(0<n<=1500)个结点的树,结点标号在0到n-1之间,在输入数据中每条边只出现一次。
输出格式
输出文件仅包含一个数,为所求的最少的士兵数目。
例如,对于如下图所示的树:
2
/
0---1
3
答案为1(只要一个士兵在结点1上)。
输入输出样例
输入 #1复制
4
0 1 1
1 2 2 3
2 0
3 0
输出 #1复制
1
【分析】
题目相当于需要求覆盖这颗树需要的最小点数
用
表示在这棵树中,以 ii 为根节点的子树在选/不选根节点的情况下,覆盖这棵树所有边需要的最小点数
所以,当不选这个节点 ii 时,则所有 以其子节点为根节点的子树 都必选根节点
当选择这个节点 ii 时,它能连接到所有的子节点,所以 以其子节点为根节点的子树 可以选则其根节点,也可以不选
归纳成方程组,可能更容易理解:
其中,Son_iSoni 为 ii 的子节点集合
显然,边界为
如果定义
时
递推式及其边界便能写在一起了:
答案看了以上大牛的解析
#include<iostream>
#include<algorithm>
#include<queue>
#include<cstring>
using namespace std;
vector <int> edge[1510];
int dp[2][1510],n,x,y,sum[1510],z;
void solve(int u,int fa)
{
for(int i=0;i<edge[u].size();i++)
{
int v=edge[u][i];
if(v==fa)continue;
solve(v,u);
dp[0][u]+=dp[1][v];
dp[1][u]+=min(dp[1][v],dp[0][v]);
}
dp[1][u]++;
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>x>>sum[x];
for(int i=1;i<=sum[x];i++)
{
cin>>z;
edge[x].push_back(z);
edge[z].push_back(x);
}
}
solve(0,0);
int ans=min(dp[0][0],dp[1][0]);
cout<<ans;
return 0;
}
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 那些年我拿下的demo站之方维O2O
- emlog自动备份插件泄露整站数据库备份漏洞
- md5(unix)原理分析
- XDCTF2015代码审计全解
- 使用腾讯云TCB云函数抓取微信情报信息
- 数据库PostrageSQL-服务器配置预写式日志
- 分享一个jsonp劫持造成的新浪某社区CSRF蠕虫
- 数据库PostrageSQL-服务器配置资源消耗
- 数据库PostrageSQL-服务器配置连接和认证
- 浏览器安全一 / Chrome XSS Auditor bypass
- 数据库PostrageSQL-服务器配置文件位置
- 数据库PostrageSQL-服务器配置设置参数
- 一个基于ngrx的计数器例子
- SAP Spartacus checkout Shipping address的页面实现
- 使用Let's Encrypt保护你的数据包