NKOJ1469 通向自由的钥匙
P1469通向自由的钥匙
|
问题描述
通向自由的钥匙被放n个房间里,这n个房间由n-1条走廊连接。但是每个房间里都有特别 的保护魔法,在它的作用下,我无法通过这个房间,也无法取得其中的钥匙。虽然我可以通过消耗能量来破坏房间里的魔法,但是我的能量是有限的。那么,如果我 最先站在1号房间(1号房间的保护魔法依然是有效的,也就是,如果不耗费能量,我无法通过1号房间,也无法取得房间中的钥匙),如果我拥有的能量为P,我 最多能取得多少钥匙?
输入格式
第一行包含两个非负整数,第一个为N,第二个为P。
接下来n行,按1~n的顺序描述了每个房间。第i+1行包含两个非负整数cost和keys,分别为第i件房取消魔法需要耗费的能量和房间内钥匙的数量。
接下来n-1行,每行两个非负整数x,y,表示x号房间和y号是连通的。
输出格式
一行一个整数,表示取得钥匙的最大值。
样例输入
5 5
1 2
1 1
1 1
2 3
3 4
1 2
1 3
2 4
2 5
样例输出
7
提示
对于20%的测试数据,有n<=20
对于30%的测试数据,有n<=30
对于所有测试数据,有p,n<=100, cost <= 32767, keys<= 32767
【题解】
多叉树转二叉树,左儿子右兄弟表示法
各种傻逼错各种卡
“将树转化为孩子兄弟表示法,由于根的左孩子还是它的孩子,右孩子是它的兄弟,因此:
树根获取资源,则左右孩子均可获取资源
树根不获取资源,则左孩子不能获取资源,右孩子可获取资源。
设f(i,j)表示以i为根结点的二叉树分配分配j的能量所获得的最多钥匙数,则有
”
——朱全民
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#define min(a, b) ((a) < (b) ? (a) : (b))
#define max(a, b) ((a) > (b) ? (a) : (b)) inline void read(int &x)
{
x = ;char ch = getchar(), c = ch;
while(ch < '' || ch > '')c = ch, ch = getchar();
while(ch <= '' && ch >= '')x = x * + ch - '', ch = getchar();
if(c == '-')x = -x;
} const int INF = 0x3f3f3f3f;
const int MAXN = + ;
const int MAXP = + ; int n,p,dp[MAXN][MAXP],cost[MAXN],key[MAXN]; struct Edge
{
int u,v,next;
Edge(int _u, int _v, int _next){u = _u;v = _v;next = _next;}
Edge(){}
}edge[MAXN]; int head[MAXN],cnt; void insert(int a, int b)
{
edge[++cnt] = Edge(a,b,head[a]);
head[a] = cnt;
} struct Node
{
int l, r;
}node[MAXN]; int b[MAXN]; void dfs(int u)
{
b[u] = ;
int kid1 = , kid2 = ;
for(register int pos = head[u];pos;pos = edge[pos].next)
{
int v = edge[pos].v;
if(!b[v])
{
if(!kid1)
{
kid1 = v;
node[u].l = v;
}
else node[kid1].r = v, kid1 = v;
dfs(v);
}
}
} int bb[MAXN]; void DP(int u)
{
if(!u)return;
bb[u] = ;
if(!bb[node[u].l])DP(node[u].l);
if(!bb[node[u].r])DP(node[u].r);
for(register int i = ;i <= p;++ i)
{
for(register int j = ;j <= p;++ j)
if(i - cost[u] - j >= )dp[u][i] = max(dp[node[u].l][j] + key[u] + dp[node[u].r][i - cost[u] - j], dp[u][i]);
else dp[u][i] = max(dp[node[u].r][i], dp[u][i]);
}
} int main()
{
read(n), read(p);
register int tmp1, tmp2;
for(register int i = ;i <= n;++ i) read(cost[i]), read(key[i]);
for(register int i = ;i < n;++ i)
{
read(tmp1), read(tmp2);
insert(tmp1, tmp2);
insert(tmp2, tmp1);
}
dfs();
DP();
printf("%d", dp[][p]);
return ;
}
NKOJ1469 通向自由的钥匙
NKOJ1469 通向自由的钥匙的更多相关文章
- NKOI 1469 通向自由的钥匙
P1469通向自由的钥匙 时间限制 : 10000 MS 空间限制 : 65536 KB 问题描述 通向自由的钥匙被放n个房间里,这n个房间由n-1条走廊连接.但是每个房间里都有特别的保护魔法,在 ...
- 动态规划 List
例题 #A 传纸条(Accepted) #B 乘积最大 (Unaccepted) #C 石子合并 (Accepted) #D 加分二叉树 (Unaccepted) #E 没有上 ...
- [Swift]LeetCode514. 自由之路 | Freedom Trail
In the video game Fallout 4, the quest "Road to Freedom" requires players to reach a metal ...
- Leetcode 514.自由之路
自由之路 视频游戏"辐射4"中,任务"通向自由"要求玩家到达名为"Freedom Trail Ring"的金属表盘,并使用表盘拼写特定关键词 ...
- Java实现 LeetCode 514 自由之路
514. 自由之路 视频游戏"辐射4"中,任务"通向自由"要求玩家到达名为"Freedom Trail Ring"的金属表盘,并使用表盘拼写 ...
- 银行HR:寒门再难出贵子
银行HR:寒门再难出贵子来源:金融行业网 2013 年 8 月 6 日 来源:天涯社区 作者:永乐大帝二世 本文是一位银行的HR写的,他工作了10年,接待了一群到银行实习的实习生,然后观察他们发生的好 ...
- 对TCP连接被重置解决方案的探究
分类: 网络与安全 对TCP连接被重置解决方案的探究——跨过GFW通向自由网络的可行途径 2010年05月25日 星期二 上午 00:19 这个标题有点长——其实开始只想写破折号之前的部分,因为这种技 ...
- 1 Processing入门简介
1 Processing入门简介 1.1 Before you start Processing是一个为开发面向图形的应用(visually oriented application)而生的简单易用的 ...
- 【美】范·K·萨普曼 - 通向财务自由之路(2013年11月26日)
<通向财务自由之路> 作 者:[美]范·K·萨普曼 译 者:董梅 系 列: 出 版:机械工业出版社 字 数:约40千字 阅读完成:2013年11月26日
随机推荐
- Docker系列(十六):搭建Openshift环境
目的: 搭建Linux下的Openshift环境. 参考资料: 开源容器云OpenShift 构建基于Kubernetes的企业应用云平台 ,陈耿 ,P253 ,2017.06 .pdf 下载地址:h ...
- Thrift(PHP)入门无错篇章(一)
一.安装篇 博主注:截至2017-10-10,官网上thrift最新版0.10.0一直无法成功编译.所以,请选择0.9.3版本,避免走各种弯路: wget http://apache.fayea.co ...
- C语言实现 计算个人所得税务2种方法
#include <stdio.h> #include <stdlib.h> /* 基于C语言的个人所得税计税系统 问题描述: 我国现行的个人所得税计算方法如下: 级数 全月应 ...
- HTML 颜色表示
三种表示方法 1 颜色单词 : blue green red pink 2 10进制表示: RGB(255, 10, 0) 3 16进制表示: #FF0000(红) #00FF00(绿)
- #、%和$符号在OGNL表达式中的作用
#.%和$符号在OGNL表达式中经常出现,而这三种符号也是开发者不容易掌握和理解的部分.在这里笔者简单介绍它们的相应用途. 1.#符号的用途一般有三种. 1)访问非根对象属性,例如示例中的#ses ...
- rsync命令集合
rsync -avz rsync://logs@211.151.78.206/www_logs/2014/03/27/* /mnt/hgfs/iautoslogs/
- uploadify附件上传 传参
首先 在刚加载jsp时就加入上传方法,所以 formDate 中的参数 zFileName是页面刚加载时 exp1的值 ,后来通过js方法赋值不被读过来,如果 你想要获得这个值,可在 调用upload ...
- Python实例2-逗号代码
假定有下面这样的列表: spam = ['apples', 'bananas', 'tofu', 'cats'] 编写一个函数,它以一个列表值作为参数,返回一个字符串.该字符串包含所有表项,表项之间以 ...
- 【neo4j】neo4j Desktop1.1.9,windows 安装
一.neo4j 介绍 Neo4j是一个高性能的,NOSQL图形数据库,它将结构化数据存储在网络上而不是表中.它是一个嵌入式的.基于磁盘的.具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储 ...
- 第一次个人项目【词频统计】——PSP表格
PSP2.1 任务内容 计划完成需要的时间(min) 实际完成需要的时间(min) Planning 计划 45 40 Estimate 估计这个任务需要多少时间,并规划大致工作步骤 30 20 De ...