【洛谷 2016】战略游戏 树形dp经典题目(类似没有上司的舞会)
来源:互联网 发布:网络机房整改方案 编辑:程序博客网 时间:2024/05/16 14:11
P2016 战略游戏
题目描述
Bob喜欢玩电脑游戏,特别是战略游戏。但是他经常无法找到快速玩过游戏的办法。现在他有个问题。
他要建立一个古城堡,城堡中的路形成一棵树。他要在这棵树的结点上放置最少数目的士兵,使得这些士兵能了望到所有的路。
注意,某个士兵在一个结点上时,与该结点相连的所有边将都可以被了望到。
请你编一程序,给定一树,帮Bob计算出他需要放置最少的士兵.
输入输出格式
输入格式:
第一行 N,表示树中结点的数目。
第二行至第N+1行,每行描述每个结点信息,依次为:该结点标号i,k(后面有k条边与结点I相连)。
接下来k个数,分别是每条边的另一个结点标号r1,r2,…,rk。
对于一个n(0< n<=1500)个结点的树,结点标号在0到n-1之间,在输入数据中每条边只出现一次。
输出格式:
输出文件仅包含一个数,为所求的最少的士兵数目。
例如,对于如下图所示的树:
0
1 2 3
答案为1(只要一个士兵在结点1上)。
输入输出样例
输入样例#1:
4
0 1 1
1 2 2 3
2 0
3 0
思路:多叉树的树形dp,好像没有上司的舞会啊。
附代码:
#include<iostream>#include<cstdio>using namespace std;int n,gen;int du[1501],tree[1501][101];int flag[1501];int f[1501][2];void dcs(int x){ int k,i,y; scanf("%d",&k); for (int i=1;i<=k;i++) { scanf("%d",&y); tree[x][++du[x]]=y; flag[y]=1; }}void dfs(int x){ for (int i=1;i<=du[x];i++) { dfs(tree[x][i]); f[x][0]+=f[tree[x][i]][1]; f[x][1]+=min(f[tree[x][i]][0],f[tree[x][i]][1]); } f[x][1]+=1;}int main(){ int x,i; scanf("%d",&n); for (i=1;i<=n;i++) { scanf("%d",&x); dcs(x); } for (int i=0;i<n;i++) if (flag[i]==0) {gen=i;break;} dfs(gen); printf("%d",min(f[gen][1],f[gen][0]));}
0 0
- 【洛谷 2016】战略游戏 树形dp经典题目(类似没有上司的舞会)
- 【codevs1380】没有上司的舞会 树形dp经典题目
- 没有上司的舞会 树形DP 经典题目
- 没有上司的舞会--经典树形DP
- 树形DP 没有上司的舞会
- 树形dp 没有上司的舞会
- 1380 没有上司的舞会 树形dp
- 树形DP Tyvj1052 没有上司的舞会
- [树形DP入门]没有上司的舞会
- 【树形dp】没有上司的舞会
- 洛谷 1352 没有上司的舞会 树形DP
- [洛谷 1352]没有上司的舞会---树形DP
- 洛谷p1352没有上司的舞会 树形dp
- 【codevs 1380】没有上司的舞会(树形dp)
- code【vs】1380 没有上司的舞会(树形dp)
- CodeVS 1380 没有上司的舞会(树形DP)
- [树形DP] 猴腮雷 (没有上司的舞会)
- 没有上司的舞会(树形dp裸题)
- 数据库系统概论学习笔记关系数据库 第二章
- C语言求两个数的最大公约数
- 51Nod 算法马拉松18 复杂度分析 二进制按位累计代价
- 理解OAuth2.0
- 从最简单的IO驱动看出工程师的水平
- 【洛谷 2016】战略游戏 树形dp经典题目(类似没有上司的舞会)
- JavaScript
- java and python学习——第四周leetcode刷题
- React Native 切换监听端口(Android)
- D3_函数
- 写一个“标准”宏MIN,这个宏输入两个参数并返回较小的一个?
- 输入框input
- 安卓面试题(1-4)
- geopandas 的使用以及相关问题