Tree
题号:NC230424
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

有一棵包含n个节点的``宝石树''。除了节点 1以外,每个节点上都结有价值为a_i的宝石,且节点u与节点 v之间的链长为

现在假设小明有个初始体力值 t

如果他想从节点 u 经过链 走到节点 v,从而获取节点v 上的宝石,那么需要保证,否则无法通过该条链。注意这里的链是双向的,即如果可以从 u走到 v,那也可以从v走到 u

当到达节点 v 时,小明立马会恢复初始体力值t,从而再有可能移动到下个节点。

已知小明一开始站在节点 1的位置,他需要获取价值总和至少为s 的宝石,问他的初始体力值 t最小是多少。

题目保证所有节点宝石价值之和不小于 s,且每个节点上的宝石最多被摘取一次。

输入描述:

第一行两个正整数 

接下来一行,有 n-1个正整数,第i个数字a_i 表示编号为节点上的宝石价值

接下来n-1行,每行有三个正整数

表示节点 u,v之间的链长为

输出描述:

输出最小初始体力值。
示例1

输入

复制
4 7
1 1 7 
1 2 1
1 3 5
1 4 3

输出

复制
3

说明


如上图所示:小明可以从节点1通过链 1走到节点 2,摘取节点 2上的宝石 a_2,然后回退回节点 1,再由节点1 通过链d_{14}走到节点4,摘取节点4上的宝石 a_4,总共可以获得价值为 8的宝石,满足大于等于 s 的要求,这时候小明的初始体力值 t只要满足等于3即可。