Description

自从 Y 君退役之后,她就迷上了吃鸡,于是她决定出一道吃鸡的题。
Y 君将地图上的所有地点标号为 1 到 n,地图中有 n − 1 条双向道路连接这些点,通过一条 双向道路需要一定时间,保证从任意一个点可以通过道路到达地图上的所有点。
有些点上可能有资源,Y 君到达一个有资源的点后,可以选择获取资源来使自己的武力值增 加 wi,也可以选择不获取资源。如果 Y 君获取了一个点上的资源,这个点上的资源就会消失,获 取资源不需要时间。
有些点上可能有敌人,Y 君到达一个有敌人的点后,必须花费 ti 秒伏地与敌人周旋,并最终 将敌人消灭。如果 Y 君消灭了一个点上的敌人,这个点上的敌人就会消失。Y 君不能无视敌人继 续前进,因为这样会被敌人攻击。
如果一个点上既有资源又有敌人,Y 君必须先消灭敌人之后才能获取资源,否则就会被敌人 突袭。
游戏开始时,Y 君可以空降到任意一个点上,接下来,她有 T 秒进行行动,T 秒后她就必须 前往中心区域送快递。Y 君希望她前往中心区域送快递时,武力值尽可能大,请你帮助 Y 君设计 路线,以满足她的要求。你只需输出 T 秒后 Y 君的武力值。

Input

第一行由单个空格隔开的两个正整数 n, T,代表点数和时间。
第二行 n 个由单个空格隔开的非负整数代表 wi,如果 wi = 0 代表该点没有武器,
第三行 n 个由单个空格隔开的非负整数代表 ti,如果 ti = 0 代表该点没有敌人。
接下来 n − 1 行每行由单个空格隔开的 3 个非负整数 a, b, c 代表连接 a 和 b 的双向道路,通 过这条道路需要 c 秒。

Output

输出一行一个整数代表 T 秒后 Y 君的武力值。

Sample Input

17 54
5 5 1 1 1 25 1 10 15 3 6 6 66 4 4 4 4
0 1 3 0 0 0 1 3 2 0 6 7 54 0 0 0 0
1 8 3
2 8 3
8 7 7
7 13 0
7 14 0
15 14 2
16 14 3
17 14 5
7 9 4
9 10 25
10 11 0
10 12 0
7 6 20
3 6 3
3 4 3
3 5 3

Sample Output

68

Data Constraint

题解:

10%输出0
20%不会。
40%可以直接做一遍背包。
60%不知道。
还是直接上100%把。

首先,我们这题显然是一道树形DP题。
我们可以设三个状态转移方程——
f[i,j]进入以i为根的子树并返回到i
g[i,j]进入以i为根的子树但不返回到i
h[i,j]从以i为根的子树里一点出发,经过i点并调回以i为根的子树中
用了j秒的最大武力值。

这是一张通用的图。

于是乎,我们可以对于每一个方程来讨论。
对于f[i,j]:f[i,j]:=max(f[i,j],f[i,j-k-2val]+f[son,k]);
表达的意思是:先从i(红色)走到儿子节点,有k的时间在i的儿子节点走,走到后返回son,然后返回i,然后i再走j-k-2
val的时间返回到i。

对于g[i,j]:
g[i,j]:=max(g[i,j],g[son,k]+f[i,j-k-val]);
表达的意思是:在i这个节点先乱走一通,回到i点,然后再走到son的节点,给这个节点k的时间走,走完之后不回来了。

g[v,j]:=max(g[i,j],g[i,j-k-2*val]+f[son,k]);
表达的意思是:在i这个节点上,走到一个儿子,然后乱走回到这个儿子,返回i点,最后再走完后不回来了。

对于h[i,j]
h[i,j]:=max(h[i,j],g[i,j-k-val]+g[son,k]);
表达的意思是:首先,从i乱走,然后,i的儿子乱走,两段连起来就相当于从i子树中一个点走到i,走到i的一个儿子,再走到终点。

h[i,j]:=max(h[i,j],f[i,k]+h[son,j-k-2*val]);
表达的意思是:首先,i的儿子的h找到,再从i乱走一通,回到i点。拆开来看就相当于son的子树中一点走到son再走到i再乱走返回i再回到son再乱走。


相当于:

h[i,j]:=max(h[i,j],f[son,k]+h[i,j-k-2*val]);
表达的意思是:首先,i的h找到,再从son乱走一通,回到son点。拆开来看就相当于i的子树中一点走到i再走到son再乱走返回son再回到i再乱走。

相当于:

然后,就可以很舒服地DP啦。
只是要注意一些DP顺序,否则会导致算重,还有就是边界条件(卡了我好久)

标程

uses math;
vari,j,k,l,n,m,time,tot,ans:longint;x,y,z,tov,next,last,val:array[1..10000] of longint;f,g,h:array[1..300,0..300] of longint;w,t:array[1..300] of longint;procedure insert(x,y,z:longint);
begininc(tot);tov[tot]:=y;next[tot]:=last[x];last[x]:=tot;val[tot]:=z;
end;procedure dfsf(v,fa:longint);
vari,j,k:longint;yz:boolean;
beginif t[v]>time then exit;i:=last[v];yz:=false;while i>0 dobeginif tov[i]<>fa thenbeginyz:=true;dfsf(tov[i],v);for j:=time downto 0 dofor k:=0 to j doif j-k>=2*val[i] thenh[v,j]:=max(h[v,j],f[tov[i],k]+h[v,j-k-2*val[i]]);for j:=time downto 0 dofor k:=0 to j doif j-k>=2*val[i] thenh[v,j]:=max(h[v,j],f[v,k]+h[tov[i],j-k-2*val[i]]);for j:=time downto 0 dofor k:=0 to j doif j-k>=val[i] thenh[v,j]:=max(h[v,j],g[v,j-k-val[i]]+g[tov[i],k]);for j:=time downto 0 dofor k:=0 to j doif j-k>=2*val[i] theng[v,j]:=max(g[v,j],g[v,j-k-2*val[i]]+f[tov[i],k]);for j:=time downto 0 dofor k:=0 to j doif j-k>=val[i] theng[v,j]:=max(g[v,j],g[tov[i],k]+f[v,j-k-val[i]]);for j:=time downto 0 dofor k:=0 to j doif j-k>=2*val[i] thenf[v,j]:=max(f[v,j],f[v,j-k-2*val[i]]+f[tov[i],k]);end;i:=next[i];end;//        f[v,t[v]]:=w[v];beginfor i:=time downto t[v] dobeginf[v,i]:=f[v,i-t[v]]+w[v];g[v,i]:=g[v,i-t[v]]+w[v];h[v,i]:=h[v,i-t[v]]+w[v];end;for i:=min(t[v]-1,time) downto 0 dobeginf[v,i]:=0;g[v,i]:=0;h[v,i]:=0;end;end;
end;
beginassign(input,'toyuq.in');reset(input);assign(output,'toyuq.out');rewrite(output);readln(n,time);for i:=1 to n dobeginread(w[i]);ans:=max(w[i],ans);end;if ans=0 thenbeginwriteln(0);halt;end;readln;for i:=1 to n do read(t[i]);for i:=1 to n-1 dobeginreadln(x[i],y[i],z[i]);insert(x[i],y[i],z[i]);insert(y[i],x[i],z[i]);end;dfsf(1,0);ans:=0;for i:=1 to n dobeginans:=max(ans,h[i,time]);end;writeln(ans);
end.

5819. 【NOIP提高A组模拟2018.8.15】 大逃杀相关推荐

  1. 5817. 【NOIP提高A组模拟2018.8.15】 抄代码

    Description J 君是机房的红太阳,每次模拟她总是 AK 虐场.然而在 NOIP2117 中,居然出现了另一位 AK 的选手 C 君! 这引起了组委会的怀疑,组委会认为 C 君有抄袭 J 君 ...

  2. 5814. 【NOIP提高A组模拟2018.8.14】 树(期望 + 倍增)

    5814. [NOIP提高A组模拟2018.8.14] 树 Problem 给定一棵nnn个点的树,m" role="presentation">mmm次询问,每次 ...

  3. JZOJ 5814. 【NOIP提高A组模拟2018.8.14】 树

    梦游中的你来到了一棵 N 个节点的树上. 你一共做了 Q 个梦, 每个梦需要你从点 u 走到点 v 之后才能苏醒, 由于你正在梦游, 所以每到一个节点后,你会在它连出去的边中等概率地选择一条走过去, ...

  4. JZOJ 5820. 【NOIP提高A组模拟2018.8.16】 非法输入

    Description 在算法竞赛中,题目一般保证了输入数据的合法性.然而在工程开发中,我们往往不期望程 序得到的输入都是合法的. D 君正忙着向校内 OJ 添加题目,在写了第 233 个 val.c ...

  5. 5778. 【NOIP提高A组模拟2018.8.8】没有硝烟的战争

    Description 被污染的灰灰草原上有羊和狼.有N只动物围成一圈,每只动物是羊或狼. 该游戏从其中的一只动物开始,报出[1,K]区间的整数,若上一只动物报出的数是x,下一只动物可以报[x+1,x ...

  6. jzoj5814 【NOIP提高A组模拟2018.8.14】 树 (树上期望,递归法列方程)

    题面 梦游中的你来到了一棵 N 个节点的树上. 你一共做了 Q 个梦, 每个梦需要你从点 u 走到 点 v 之后才能苏醒, 由于你正在梦游, 所以每到一个节点后,你会在它连出去的边中等概率地 选择一条 ...

  7. JZOJ5814. 【NOIP提高A组模拟2018.8.14】 树

    Description 梦游中的你来到了一棵 N 个节点的树上. 你一共做了 Q 个梦, 每个梦需要你从点 u 走到 点 v 之后才能苏醒, 由于你正在梦游, 所以每到一个节点后,你会在它连出去的边中 ...

  8. 5814. 【NOIP提高A组模拟2018.8.14】 树

    题目描述 梦游中的你来到了一棵 N 个节点的树上. 你一共做了 Q 个梦, 每个梦需要你从点 u 走到 点 v 之后才能苏醒, 由于你正在梦游, 所以每到一个节点后,你会在它连出去的边中等概率地 选择 ...

  9. jzoj5814 [NOIP提高A组模拟2018.8.14] 树 树形dp

    Description 梦游中的你来到了一棵 N 个节点的树上. 你一共做了 Q 个梦, 每个梦需要你从点 u 走到 点 v 之后才能苏醒, 由于你正在梦游, 所以每到一个节点后,你会在它连出去的边中 ...

最新文章

  1. python常见的排序算法_常见排序算法之python实现
  2. AndroidStudio Gradle自定义属性xmlns无法识别
  3. Spring常见面试题
  4. 什么叫企业级即时通讯软件
  5. mac设置python版本切换,和设置python默认版本
  6. 铁路专用计算机,浅谈专用铁路计算机联锁控制
  7. D1-H哪吒 设置hdmi分辨率
  8. 2022-Java面试宝典收藏版
  9. 【Unity3D插件】Unity开发利器——插件(各类插件及教程推荐)| 寻找C站宝藏
  10. 2019深圳杯数学建模比赛--初步思路
  11. OFDM中的帧(frame)、符号(symbol)、子载波(subcarriers)、导频(Pilot)、保护间隔(guard)的关系图解以及代码详解--MATLAB
  12. java计算机毕业设计易医就医购药交互平台源码+系统+mysql数据库+lw文档
  13. ffmpeg GPU加速压制视频
  14. 两高一部电子数据取证规则_“鼓浪听涛,论道取证”2019中国电子数据取证峰会在厦门召开,行业专家齐聚...
  15. C++通讯录管理系统
  16. 初探linux子系统集之led子系统(三)【转】
  17. c语言贺卡代码大全,C++实现新年贺卡程序
  18. 安迪的第一个字典(Andy‘s First Dictionary,UVa10815)
  19. Excel实现线性回归分析——高尔顿数据集、四重奏数据集
  20. 全新原装STM32/GD32可能是假货

热门文章

  1. 破坏计算机系统是什么行为,破坏计算机信息系统罪的行为方式有哪些?
  2. ossfs挂载以及遇到的问题
  3. ABBYY FineReader 14都新增了什么功能?
  4. FT232USB串口通信线序
  5. 使用live555 直播来自v4l2的摄像头数据
  6. iOS 添加自定义文字字体样式
  7. 实习笔记:空间分析+地形分析+水文分析
  8. 一文数学数模-相关性分析(三)皮尔逊相关性分析一文详解+python实例代码
  9. php台阶走两步余一步,【原创BG】嗨,那条龙 CP:阿莱克丝X大王
  10. 信用风险理论、模型及应用研究(综述)