小胖守皇宫(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.这些区间的并可以表示为一些不相交的闭区间的并.你的任务就是在这些表示方式中找出包含最少区间的方案.你的输出应该按照区间的升序排 ...
随机推荐
- - 集合 遍历 foreach Iterator 并发修改 ConcurrentModificationException MD
目录 目录 为什么不能在 foreach 循环里进行元素的 remove/add 操作 背景 foreach 循环 问题重现 fail-fast remove/add 做了什么 正确姿势 直接使用普通 ...
- Tomcat 类加载器的实现
Tomcat 内部定义了多个 ClassLoader,以便应用和容器访问不同存储库中的类和资源,同时达到应用间类隔离的目的.本文首发于公众号:顿悟源码. 1. Java 类加载机制 类加载就是把编译生 ...
- java面向对象的基本概念
面向对象的基本概念 这里先介绍面向对象程序设计的一些关键概念,并开始使用类,你需要学习一些术语,我们尽量用比较浅显的语言来介绍,因为这些内容都比较重要,所以希望大家好好好理解. 一.什么是对象和面向对 ...
- laravel 5.5 仓库模式 文件之间接口与实现操作
仓库模式 最直接的意思就是: Eloquent数据(数据库)查询 方便快捷,简单明了.自己怎么写的,就怎么去调用,完全ok~ 本质意思: 仓库就像是业务内部的数据对象集合,负责协调业务和数据映射层之 ...
- 用Java访问带有Kerberos认证的HBase
程序代码实例如下: package com.hbasedemo; import java.io.IOException; import org.apache.hadoop.conf.Config ...
- SUSE12SP3-Samba配置
简介 samba官网:https://www.samba.org/ 维基百科: https://zh.wikipedia.org/wiki/Samba Samba,是种用来让UNIX系列的操作系统与微 ...
- ASP.NET Core 配置文件
在ASP.NET Core 中,应用程序配置数据可以使用JSON, XML 和 INI格式 和内置环境变量,命令行参数或内存中的集合. 1.如何获取和设置配置 ASP.NET Core配置系统针对以前 ...
- 2019 满帮java面试笔试题 (含面试题解析)
本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.满帮等公司offer,岗位是Java后端开发,因为发展原因最终选择去了满帮,入职一年时间了,也成为了面试官,之 ...
- 物联网学习笔记三:物联网网关协议比较:MQTT 和 Modbus
物联网学习笔记三:物联网网关协议比较:MQTT 和 Modbus 物联网 (IoT) 不只是新技术,还是与旧技术的集成,其关键在于通信.可用的通信方法各不相同,但是,各种不同的协议在将海量“事物”连接 ...
- 【Mysql技术内幕InnoDB存储引擎】读书笔记
一.存储引擎 1.InnoDB引擎 设计目标是面向在线事务(OLTP)处理的应用. 支持事务.行级锁.通过多版本并发控制(MVCC)支持高并发.提供一致性非锁定读.next-key locking避免 ...