poj1463 Strategic game【树形DP】
| Time Limit: 2000MS | Memory Limit: 10000K | |
| Total Submissions: 9582 | Accepted: 4516 |
Description
Your program should find the minimum number of soldiers that Bob has to put for a given tree.
For example for the tree: 
the solution is one soldier ( at the node 1).
Input
- the number of nodes
- the description of each node in the following format
node_identifier:(number_of_roads) node_identifier1 node_identifier2 ... node_identifiernumber_of_roads
or
node_identifier:(0)
The node identifiers are integer numbers between 0 and n-1, for n nodes (0 < n <= 1500);the number_of_roads in each line of input will no more than 10. Every edge appears only once in the input data.
Output
Sample Input
4
0:(1) 1
1:(2) 2 3
2:(0)
3:(0)
5
3:(3) 1 4 2
1:(1) 0
2:(0)
0:(0)
4:(0)
Sample Output
1
2
Source
题意:
给定一棵n个节点的树,如果在一个节点上放上一个士兵,所有与这个节点相连的边都可以被看守。现在希望所有的边都可以被看守,问需要最少放多少士兵。
思路:
比较典型的一个树形DP,我们用dp[i]表示以i为根的子树的最少士兵数。但是我们并不知道i上有没有士兵,转移方程就写不出来。
所以我们给dp再加一维,dp[i][1]表示以i为根并且i上有士兵的子树的最少士兵数,dp[i][0]为i上没有士兵。
那么对于某个节点rt,假设他的所有孩子的dp均已得到。
那么dp[rt][0] = dp[son][1]之和,因为他的每一个孩子都要有一个士兵。
dp[rt][1] = min(dp[son][0], dp[son][1])之和,即他的每一个孩子可以放士兵也可以不放士兵。
随便取一个节点作为树根,最后输出这个节点dp[rt][0],dp[rt][1]的较小值即可。
//#include <bits/stdc++.h>
#include<iostream>
#include<cmath>
#include<algorithm>
#include<stdio.h>
#include<cstring>
#include<vector>
#include<map>
#include<set> #define inf 0x3f3f3f3f
using namespace std;
typedef long long LL; int n;
const int maxn = ;
vector<int>edge[maxn];
int dp[maxn][]; void dfsdp(int rt, int fa)
{
dp[rt][] = ;
dp[rt][] = ;
for(int i = ; i < edge[rt].size(); i++){
int son = edge[rt][i];
if(son == fa)continue;
else dfsdp(son, rt);
dp[rt][] += dp[son][];
dp[rt][] += min(dp[son][], dp[son][]);
} } int main(){ while(scanf("%d", &n) != EOF){
for(int i = ; i <= n; i++){
edge[i].clear();
}
for(int i = ; i <= n; i++){
int u, num;
scanf("%d:(%d)", &u, &num);
for(int j = ; j <= num; j++){
int v;
scanf(" %d", &v);
edge[u + ].push_back(v + );
edge[v + ].push_back(u + );
}
} dfsdp(, );
printf("%d\n", min(dp[][], dp[][]));
}
return ;
}
poj1463 Strategic game【树形DP】的更多相关文章
- poj1463 Strategic game[树形DP]
求一棵树每条边都被选上的点覆盖掉的最少选点数. 一条边被覆盖掉,必须他父亲和儿子中选一个..这不就是比NOIP2018D2T3还裸的暴力么.水掉. lyd给的练习题都什么**玩意儿.. code不挂了 ...
- POJ1463:Strategic game(树形DP)
Description Bob enjoys playing computer games, especially strategic games, but sometimes he cannot f ...
- Strategic game树形DP解法(Poj1463,Uva1292)
已经写过本题用二分图的做法,见这儿. 本题的图是一棵树,求最小点覆盖也可以用树形DP的做法. 定义状态f[0/1][u]表示以u为根的子树,u选取/不选最少需要选取多少点来覆盖. 显然 f[0][u] ...
- HDU 1054 Strategic Game (树形dp)
题目链接 题意: 给一颗树,用最少的点覆盖整棵树. 每一个结点可以防守相邻的一个边,求最少的点防守所有的边. 分析: 1:以当前节点为根节点,在该节点排士兵守护道路的最小消耗.在这种情况下,他的子节点 ...
- UVa 1292 - Strategic game (树形dp)
本文出自 http://blog.csdn.net/shuangde800 题目链接: 点击打开链接 题目大意 给定一棵树,选择尽量少的节点,使得每个没有选中的结点至少和一个已选结点相邻. 思路 ...
- hdu1054 Strategic Game 树形DP
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1054 思路:树形DP,用二分匹配也能解决 定义dp[root][1],表示以root 为根结点的子树且 ...
- POJ 1463 Strategic game(树形DP入门)
题意: 给定一棵树, 问最少要占据多少个点才能守护所有边 分析: 树形DP枚举每个点放与不放 树形DP: #include<cstdio> #include<iostream> ...
- Strategic game(树形DP入门)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1054 题目大意:一棵树,要放置哨兵,要求最少放置多少哨兵能监视到所有的结点 题目分析: 放置哨兵无非两 ...
- Strategic game(POJ 1463 树形DP)
Strategic game Time Limit: 2000MS Memory Limit: 10000K Total Submissions: 7490 Accepted: 3483 De ...
随机推荐
- Android BitmapFactory
android BitmapFactory BitmapFactory是一个工具类,用于从不同数据源解析,创建Bitmap对象.bitmap类代表位图. BitmapFactory常用方法 stati ...
- vector 排序
#include <vector> #include <algorithm> 一.vector保存的是基础数据类型(int.char.float等) vector<int ...
- C++ 有用的网站
C++ 有用的网站C++ Programming Language Tutorials ? C++ 编程语言教程.C++ Programming ? 这本书涵盖了 C++ 语言编程.软件交互设计.C+ ...
- mac下普通用户无法创建crontab的问题解决
想在mac下弄一个crontab定时任务,以为会像linux上那样顺利那,结果碰壁了,报错信息例如以下: ➜ autoshell crontab -ecrontab: no crontab for ...
- 【Java面试题】33 HashMap和Hashtable的区别
1 HashMap不是线程安全的 hastmap是一个接口 是map接口的子接口,是将键映射到值的对象,其中键和值都是对象,并且不能包含重复键,但可以包含重复值.HashMap允许null key和n ...
- VC实现波形不闪烁动态绘图 .
http://blog.csdn.net/xuyongbeijing2008/article/details/8064284 源代码:http://www.vckbase.com/index.php/ ...
- 一、SDWebImage分析--库处理流程分析
二.SDWebImage分析--源码具体分析 这阵子看了SDWebImage的实现跟源代码.也看了下网上的一些总结. 这里我自己画了个流程图来辅助理解下SDWebImage这个库的实现流程.相信也是有 ...
- HTML&CSS精选笔记_HTML与CSS网页设计概述
HTML与CSS网页设计概述 Web基本概念 认识网页 网页主要由文字.图像和超链接等元素构成.当然,除了这些元素,网页中还可以包含音频.视频以及Flash等. 名词解释 Internet网络 就是通 ...
- Java精选笔记_JSP开发模型
JSP开发模型 JSP Model JSP Model1简单轻便,适合小型Web项目的快速开发. JSP Model2模型是在JSP Model1的基础上提出的,它提供了更清晰的代码分层,更适用于多人 ...
- Python IDLE背景设置与使用
相信刚进入python学习之路的朋友们,都还是挺喜欢python自带的IDLE,但是白的代码背景色以及其它的代码色确实让人看着有点不舒服,所以当时也琢磨着能不能自己给它换换颜色,这个当然可以,废话不多 ...