小胖守皇宫(VIJOS P1144 )题解
题目描述
huyichen世子事件后,xuzhenyi成了皇上特聘的御前一品侍卫。 皇宫以午门为起点,直到后宫嫔妃们的寝宫,呈一棵树的形状;某些宫殿间可以互相望见。大内保卫森严,三步一岗,五步一哨,每个宫殿都要有人全天候看守,在不同的宫殿安排看守所需的费用不同。 可是xuzhenyi手上的经费不足,无论如何也没法在每个宫殿都安置留守侍卫。 帮助xuzhenyi布置侍卫,在看守全部宫殿的前提下,使得花费的经费最少。
输入格式
输入文件中数据表示一棵树,描述如下:
第1行 nn,表示树中结点的数目。
第2行至第n+1n+1行,每行描述每个宫殿结点信息,依次为:该宫殿结点标号i(0<i≤n)i(0<i≤n),在该宫殿安置侍卫所需的经费kk,该边的儿子数mm,接下来mm个数,分别是这个节点的mm个儿子的标号r1,r2,...,rmr1,r2,...,rm。
对于一个n(0<n≤1500)n(0<n≤1500)个结点的树,结点标号在1到nn之间,且标号不重复。
输出格式
输出文件仅包含一个数,为所求的最少的经费。
由于宫殿节点图是树的形状,所以很明显这是树形DP。
首先二维状态,dp[i][j],j∈{1,2,3}
dp[i][1]表示这个点被自己守卫。
dp[i][2]表示这个点被父亲守卫。
dp[i][3]表示这个点被儿子守卫。
根据属性DP惯用套路,首先大法师(DFS)搜索到叶节点,然后向上更新。
如果这个点被自己守卫,那么他的儿子可能有三种状态,既可能是自己守卫,又可能被父亲守卫,还有可能被它的儿子守卫。
用s来代表x的儿子,所以:
dp[x][1] += min(dp[s][2],min(dp[s][3],dp[s][1]));
如果这个点被父亲守卫,那么他的儿子只可能被自己守卫,或者被它的儿子守卫。
dp[x][2] += min(dp[s][1],dp[s][3]);
那么最困难的是这个点被自己的儿子守卫,那么他的所有儿子同样是两种状态,被自己守卫或者被它的儿子守卫。且一定存在一个儿子被自己守卫。
如果更新了一圈后,发现所有的儿子自己守卫的代价都要大于它们的儿子守卫它们的价值(即x的儿子s守卫的价值大于s的儿子守卫的价值),我们需要加上一个s自己守卫和s的儿子守卫的差量,并且保证这个差量最小。
注意把所有点自己守卫自己的情况先赋上值。
代码:
#include<cstdio>
#include<algorithm>
#define N 1555
using namespace std;
int money[N];
int son[N][N];
int dp[N][];
void dfs(int x)
{
if(!son[x][])
{
dp[x][] = money[x];
dp[x][] = money[x];
dp[x][] = ;
return ;
}else
{
for(int i = ;i<=son[x][];i++)
{
dfs(son[x][i]);
}
for(int i = ;i<=son[x][];i++)
{
int s = son[x][i];
dp[x][] += min(dp[s][],min(dp[s][],dp[s][]));//自己
dp[x][] += min(dp[s][],dp[s][]);//父亲
}
bool flag = ;
int bu = ;
for(int i = ;i<=son[x][];i++)
{
int s = son[x][i];
dp[x][] += min(dp[s][],dp[s][]);
if(dp[s][]>=dp[s][])
{
flag = ;
}
bu = min(bu,dp[s][]-dp[s][]);
}
if(flag==)
{
dp[x][]+=bu;
}
}
}
int main()
{
int n;
scanf("%d",&n);
int root;
for(int i = ;i<=n;i++)
{
int num;
scanf("%d",&num);
if(i==)
{
root = num;
}
scanf("%d",&money[num]);
dp[num][] = money[num];
scanf("%d",&son[num][]);
for(int j = ;j<=son[num][];j++)
{
scanf("%d",&son[num][j]);
}
}
dfs(root);
printf("%d",min(dp[root][],dp[root][]));
}
小胖守皇宫(VIJOS P1144 )题解的更多相关文章
- Vijos 1144 小胖守皇宫 【树形DP】
小胖守皇宫 描述 huyichen世子事件后,xuzhenyi成了皇上特聘的御前一品侍卫. 皇宫以午门为起点,直到后宫嫔妃们的寝宫,呈一棵树的形状:某些宫殿间可以互相望见.大内保卫森严,三步一岗,五步 ...
- vijos 小胖守皇宫
点击打开题目 树形DP 显然会想到某个点放或不放守卫来定义状态,但在不放的情况下,需要分类讨论是父亲放还是一个儿子放,于是定义以下状态: f[root][0]表示自己不放,父亲也不放 f[root][ ...
- vijos1144(小胖守皇宫)
也是ural1039 描述 huyichen世子事件后,xuzhenyi成了皇上特聘的御前一品侍卫. 皇宫以午门为起点,直到后宫嫔妃们的寝宫,呈一棵树的形状:某些宫殿间可以互相望见.大内保卫森严,三步 ...
- 树形dp 之 小胖守皇宫
题目描述 huyichen世子事件后,xuzhenyi成了皇上特聘的御前一品侍卫. 皇宫以午门为起点,直到后宫嫔妃们的寝宫,呈一棵树的形状:有边相连的宫殿间可以互相望见.大内保卫森严,三步一岗,五步一 ...
- Vijos1144小胖守皇宫【树形DP】
皇宫看守 太平王世子事件后,陆小凤成了皇上特聘的御前一品侍卫.皇宫以午门为起点,直到后宫嫔妃们的寝宫,呈一棵树的形状:某些宫殿间可以互相望见.大内保卫森严,三步一岗,五步一哨,每个宫殿都要有人全天候看 ...
- 【vijos1144】小胖守皇宫(树形DP)
描述 huyichen世子事件后,xuzhenyi成了皇上特聘的御前一品侍卫. 皇宫以午门为起点,直到后宫嫔妃们的寝宫,呈一棵树的形状:某些宫殿间可以互相望见.大内保卫森严,三步一岗,五步一哨,每个宫 ...
- 【树形dp】vijos1144小胖守皇宫
细节很精妙 描述 huyichen世子事件后,xuzhenyi成了皇上特聘的御前一品侍卫. 皇宫以午门为起点,直到后宫嫔妃们的寝宫,呈一棵树的形状:某些宫殿间可以互相望见.大内保卫森严,三步一岗,五步 ...
- [vijos1144]小胖守皇宫<树形dp>
题目链接:https://vijos.org/p/1144 woc我竟然A了,这道经典的树形dp或者说是树形dp的入门题我终于过了,虽然之前做过一些树形dp的题,但是这题开始还是一脸懵逼,dp方程如何 ...
- 区间 (vijos 1439) 题解
[问题描述] 现给定n个闭区间[ai,bi],1<=i<=n.这些区间的并可以表示为一些不相交的闭区间的并.你的任务就是在这些表示方式中找出包含最少区间的方案.你的输出应该按照区间的升序排 ...
随机推荐
- c# 创建Excel com加载项Ribbon动态加载工作簿和工作表
使用 VSTO 创建外接程序,Gallery控件动态加载工作簿名称 代码如下: 加载工作簿名称: private void Gallery1_ItemsLoading(object sender, R ...
- jQuery实现form表单基于ajax无刷新提交方法详解
本文实例讲述了jQuery实现form表单基于ajax无刷新提交方法.分享给大家供大家参考,具体如下: 首先,新建Login.html页面: <!DOCTYPE html PUBLIC &quo ...
- python卸载重新安装,一键安装卸载前的所有安装的第三方插件
好多小可爱都有这样一个困扰,python有了一个大版本的更新,我也想更新,但是安装的好多第三方的库可怎么办呀,更新之后再去一个一个的安装,那可就烦死了. 在这里我来教大家如何快速去安装python更新 ...
- 理解 BLS 签名算法
理解 BLS 签名算法 来源 https://medium.com/cryptoadvance/bls-signatures-better-than-schnorr-5a7fe30ea716 原文标题 ...
- only size-1 arrays can be converted to Python scalars
python版本:3.6.5 opencv版本:3.2.0 使用的jupyter notebook 源码如下: import cv2 import numpy as np import matplot ...
- Mybatis映射器接口代理对象的方式 运行过程
查询一张表的所有数据. 环境: 使用工具IntelliJ IDEA 2018.2版本. 创建Maven工程不用骨架 1.pom.xml <?xml version="1.0" ...
- 阿里熔断限流Sentinel研究
1. 阿里熔断限流Sentinel研究 1.1. 功能特点 丰富的应用场景:例如秒杀(即突发流量控制在系统容量可以承受的范围).消息削峰填谷.集群流量控制.实时熔断下游不可用应用等 完备的实时监控:S ...
- 另类WebShell监测机制--基于auditd
鸣 谢 VSRC感谢业界小伙伴——老陈投稿精品原创类文章.VSRC欢迎精品原创类文章投稿,优秀文章一旦采纳发布,将有好礼相送,我们为您准备的丰富奖品包括但不仅限于:MacbookAir.VSRC定制 ...
- MySQL倒序索引测试1
测试环境 MySQL Community Server 准备测试数据 DROP TABLE TB001; CREATE TABLE TB001(ID INT PRIMARY KEY AUTO_INCR ...
- Xinetd超级守护进程
Xinetd超级守护进程 00.什么是xinetd服务 xinetd(extended Internet services daemon), 是新一代网络守护进程服务程序, 又叫超级守护进程. 经常用 ...