时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 512 M,其他语言1024 M
64bit IO Format: %lld
题目描述
小A决定要好好学习啦!
小A总共有 n 个学习任务,每个任务有a(难度),b(耗时) 和 c(价值) 三个属性。由于他非常机智并且非常闲,难度和耗时并不能对他造成影响。不过由于学习会越学越累,他每次完成的任务的难度和耗时都不能比上一次完成的大。
已知这些学习任务可以抽象成一颗有根树,其中 1 号任务为根节点。因为学习要有系统性,若完成了一个任务后,只能接着完成其子树中的任务。
现在小A想使完成的学习任务的价值最大,你能帮帮他吗?
输入描述:
第一行一个数 n 表示学习任务数量,接下来 n 行,每行 3 个正整数 ai,bi,ci,分别表示第 i 个学习任务的难度,耗时和价值。接下来 n-1 行描述了这些学习任务的关系,每行两个正整数 x,y(1≤x,y≤n) ,表示 x 是 y 在树上的父亲。
输出描述:
输出一行一个数表示小A能完成的学习任务的最大价值。
示例1
输入
复制
3
3 3 3
4 4 2
1 1 1
1 2
2 3
说明
可以完成的任务集合有 {1,3},{2,3},{1},{2},{3},其中显然完成 1,3 两个任务是最优的。
备注:
对于 10% 的数据 ,n<=10
对于 30% 的数据 ,n<=1000
对于额外 20% 的数据 ,任务构成了一条链,且第 i 个任务的父亲是 i-1
对于额外 10% 的数据 , 所有任务的难度相等
对于 100%的数据 ,n≤105,1≤ai,bi≤109,1≤ci≤104