$loj10156/$洛谷$2016$ 战略游戏 树形$DP$
Desription
Bob 喜欢玩电脑游戏,特别是战略游戏。但是他经常无法找到快速玩过游戏的方法。现在他有个问题。
现在他有座古城堡,古城堡的路形成一棵树。他要在这棵树的节点上放置最少数目的士兵,使得这些士兵能够瞭望到所有的路。
注意:某个士兵在一个节点上时,与该节点相连的所有边都将能被瞭望到。
请你编一个程序,给定一棵树,帮 Bob 计算出他最少要放置的士兵数。
Sol
状态:
f[i][0]表示i不放士兵时,以i为根的子树所需要的最小士兵数
f[i][1]表示i放士兵时,以i为根的子树所需要的最小士兵数
转移:
f[i][0]:i不放,那么它的子结点都要放
f[i][1]:i放,那么它的子结点可放可不放,取小即可
感觉比较板子题QwQ
Code
(It was written long long ago.)
#include<iostream>
#include<cstdio>
#include<vector>
using namespace std;
int r()
{
int x=,y=;;char ch;
ch=getchar();
while(ch<''||ch>'') {if(ch=='-') y=-;ch=getchar();}
while(ch>=''&&ch<='') {x=(x<<)+(x<<)+ch-'';ch=getchar();}
return x*y;
}
int n;
int num[];
bool ff[];
vector<int> son[];
int root;
void read()
{
n=r();
for(int i=;i<n;i++)
{
i=r();
num[i]=r();
for(int j=;j<=num[i];j++)
{
int x=r();
son[i].push_back(x);
ff[x]=;
}
}
while(ff[root]) root++;
}
int f[][];
void dp(int x)
{
f[x][]=;
f[x][]=;
if(num[x]==) return ;
for(int i=;i<num[x];i++)
{
int y=son[x][i];dp(y);
f[x][]+=f[y][];
f[x][]+=min(f[y][],f[y][]);
}
}
int main()
{
read();
dp(root);
int ans=min(f[root][],f[root][]);
printf("%d",ans);
return ;
}
随机推荐
- C++中文本的读入
读入文本文件 标准库包含逐行读取文本文件的功能.然后,你可以一次一行地解析文本文件的每一行. 比如说,你有文件,其中使用数字和逗号表示一个 3x4 的矩阵: , , , 10.5 , , , , , ...
- hdu 5744 Keep On Movin (2016多校第二场)
Keep On Movin Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Tot ...
- 十分钟学会 Fiddler
一.Fiddler介绍 Fiddler是一个http抓包改包工具,fiddle英文中有"欺骗.伪造"之意,与wireshark相比它更轻量级,上手简单,因为只能抓http和http ...
- oracle 识别’低效执行’的SQL语句
用下列SQL工具找出低效SQL: SELECT EXECUTIONS , DISK_READS, BUFFER_GETS, ROUND((BUFFER_GETS-DISK_READS)/BUFFER_ ...
- SuperSocket SuperWebSocket并发数100限制的问题
var wsSer = new WebSocketServer(); wsSer.NewMessageReceived += wsSer_NewMessageReceived;//有消息传入时事件 w ...
- 通过git从码云克隆项目到本地
1.下载安装Git,傻瓜式下一步下一步即可... 2.配置Git: 2.1.选择你要clone到本地的路径:右键--->$ Git Bash Here,弹出Linux命令窗口:$ cd ~直接回 ...
- python中使用指定GPU
import os os.environ["CUDA_VISIBLE_DEVICES"] = "2" # 或 os.environ["CUDA_VIS ...
- lua在C/C++中使用table生成对应键及值
int nTop = lua_gettop(L); // 栈内初始数,假设当前为0 lua_newtable(L); // push table lua_pushstring(L,"Line ...
- Flex AIR Mobile应用性能解决方案
这个flex mobile开发,一般原生开发也许是最合适的方式,但是涉及到跨平台的问题,有精力的团队一般都会逐个基于移动操作系统进行开发.但是如果追求短小,精悍,快速,希望能够跨平台,基于html5 ...
- Vue 父组件与子组件的传值
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...