洛谷2016 战略游戏 (0/1状态的普通树形Dp)
题意:
给出一个树,覆盖树上某一个点的花费为w[i],求树上每一条边至少有一个点覆盖的最小花费。
细节:
1.一条边的两端可以均被覆盖,但是不能存在一条边的两端都不被覆盖。
2.可能存在
分析:
对于一对儿子和父亲节点来说,要么儿子覆盖父亲不覆盖,父亲覆盖儿子不覆盖,或者是两者均被覆盖,所以不难发现对于父亲节点来说,若其被覆盖,则它的所有子孙可以被覆盖也可以不被覆盖,若其不被覆盖,则它的子孙必须可以被全部覆盖。
所以状态变得显然:dp[u][0/1] 表示节点 u 是否被覆盖的最小花费
再根据上方的分析条件转移如下:
dp[u][1] = ∑ min( dp[v][0] , dp[v][1] )
dp[u][0] = ∑ dp[v][1]
代码
#include<bits/stdc++.h>
#define MAXN 1505
using namespace std;
int f[MAXN][2], n;
vector<int> Right[MAXN];
void dfs(int u, int fa){
f[u][0]=0, f[u][1]=1;
for (int i=0; i<Right[u].size(); i++) {
int v=Right[u][i];
if (v==fa) continue;
dfs(v, u);
f[u][0]+=f[v][1];
f[u][1]+=min(f[v][0], f[v][1]);
}
}
int main(){
scanf("%d", &n);
for (int i=1, x, num; i<=n; i++) {
scanf("%d%d", &x, &num);
for (int j=1, y; j<=num; j++) {
scanf("%d", &y);
Right[x].push_back(y);
Right[y].push_back(x);
}
}
dfs(1, -1);
printf("%d\n", min(f[root][0], f[root][1]));
return 0;
}
Ps:
此题与 DAY2T3 的 44 分算法十分雷同,但是我死在了考场的一线上……
洛谷2016 战略游戏 (0/1状态的普通树形Dp)的更多相关文章
- $loj10156/$洛谷$2016$ 战略游戏 树形$DP$
洛谷loj Desription Bob 喜欢玩电脑游戏,特别是战略游戏.但是他经常无法找到快速玩过游戏的方法.现在他有个问题. 现在他有座古城堡,古城堡的路形成一棵树.他要在这棵树的节点上放置最少数 ...
- 洛谷 2016 战略游戏(树形DP)
题目描述 Bob喜欢玩电脑游戏,特别是战略游戏.但是他经常无法找到快速玩过游戏的办法.现在他有个问题. 他要建立一个古城堡,城堡中的路形成一棵树.他要在这棵树的结点上放置最少数目的士兵,使得这些士兵能 ...
- 洛谷P2016战略游戏
传送门啦 战略游戏这个题和保安站岗很像,这个题更简单,这个题求的是士兵人数,而保安站岗需要求最优价值. 定义状态$ f[u][0/1] $ 表示 $ u $ 这个节点不放/放士兵 根据题意,如果当前节 ...
- [洛谷P2016] 战略游戏 (树形dp)
战略游戏 题目描述 Bob喜欢玩电脑游戏,特别是战略游戏.但是他经常无法找到快速玩过游戏的办法.现在他有个问题. 他要建立一个古城堡,城堡中的路形成一棵树.他要在这棵树的结点上放置最少数目的士兵,使得 ...
- 洛谷P2016 战略游戏
P2016 战略游戏 题目描述 Bob喜欢玩电脑游戏,特别是战略游戏.但是他经常无法找到快速玩过游戏的办法.现在他有个问题. 他要建立一个古城堡,城堡中的路形成一棵树.他要在这棵树的结点上放置最少数目 ...
- 【洛谷P2016战略游戏】
树形dp的经典例题 题目描述 Bob喜欢玩电脑游戏,特别是战略游戏.但是他经常无法找到快速玩过游戏的办法.现在他有个问题. 他要建立一个古城堡,城堡中的路形成一棵树.他要在这棵树的结点上放置最少数目的 ...
- 洛谷 P2016 战略游戏
题意简述简述 求一棵树的最小点覆盖 题解思路 树形DP dp[i][0]表示第i个点覆盖以i为根的子树的最小值,且第i个点不放士兵 dp[i][1]表示第i个点覆盖以i为根的子树的最小值,且第i个点放 ...
- 洛谷AT2046 Namori(思维,基环树,树形DP)
洛谷题目传送门 神仙思维题还是要写点东西才好. 树 每次操作把相邻且同色的点反色,直接这样思考会发现状态有很强的后效性,没办法考虑转移. 因为树是二分图,所以我们转化模型:在树的奇数层的所有点上都有一 ...
- 2018.09.14 洛谷P3931 SAC E#1 - 一道难题 Tree(树形dp)
传送门 简单dp题. f[i]表示以i为根的子树被割掉的最小值. 那么有: f[i]=min(∑vf[v],dist(i,fa))" role="presentation" ...
随机推荐
- 交表(Send a Table)
#include<stdio.h> #include<string.h> #define N 50010 int phi[N],n,sum[N]; void phi_table ...
- hdu1811 Rank of Tetris 并查集+拓扑排序
#include <stdio.h> #include <string.h> #include <vector> #include <queue> us ...
- Java反编译工具-JD-GUI
Java是跨平台的,JD-GUI提供了多个系统的支持,但是不建议直接安装,最快的方式推荐直接下载JAR包,然后用java -jar进行运行. 就现在的版本是1.4.0,停留在2015年,估计近期会更新 ...
- 转 多个版本的数据库在同一服务器上ORA-12557
http://blog.chinaunix.net/uid-42518-id-3153473.html 问题描述:当同一台机子上安装了多个版本的数据库,可能在连接库或ASM时会报以下错误.ORA-12 ...
- 关于html/css的路径问题
非原创,转自:http://blog.sina.com.cn/s/blog_6c21f6480101cb33.html [问题描述]: 比如你有Web项目solo,假如目录结构如下: 在cy.css中 ...
- C/C++程序计时函数gettimeofday的使用
linux 环境下 用 clock_t发现不准. 换用 //头文件 #include <sys/time.h> //使用timeval start, end; gettimeofday ...
- SQLyog连接MySQL时出现的2058错误解决方法
配置新连接报错:错误号码 2058,分析是 mysql 密码加密方法变了. 解决方法:windows 下cmd 登录 mysql -u root -p 登录你的 mysql 数据库,然后执行这条SQL ...
- 配置nginx+tomcat支持websocket
问题情景: 最近开发新增加一个项目,需要支持https wss协议 访问https://test.aa.com 使用nginx反向代理到后端tomcat web应用 访问https://tes ...
- 使用docker搭建gitlab 服务器
本次使用的docker版本为 1.首先需要安装docker. 2.启动docker后,service docker start 3.拉取镜像 docker pull gitlab/gitlab- ...
- laravel homestead comoser install 报错
项目部署的时候composer install报错 说那个依赖包没有安装成功需要回滚删除但是删除不了 解决: 要配置共享文件 注:使用 NFS 的话,需要安装 vagrant-winnfsd 插件.该 ...