昂贵的旅途 - 代码源竞赛平台

题目描述

蜗蜗准备在一张树形地图上旅行。地图中有 NN 个地点,编号为 11 到 NN,地点之间由 N−1N-1 条双向道路连接。经过每条道路都需要支付对应的通行费,在地点 jj 结束旅行还需要支付终点费用 DjD_j。

从地点 ii 前往地点 jj 时,蜗蜗沿两点之间的唯一简单路径行走。总费用等于这条路径上的通行费之和,再加上 DjD_j,不计算其他地点的终点费用。

对于每个出发地点 ii,蜗蜗必须选择一个与它不同的地点作为终点。请你分别求出各个出发地点对应的最大旅行费用。

输入格式

第一行包含一个整数 NN,表示地点数量。

接下来 N−1N-1 行,每行包含三个整数 Ai,Bi,CiA_i,B_i,C_i,表示地点 AiA_i 与地点 BiB_i 之间有一条双向道路,经过这条道路需要支付 CiC_i 的通行费。

最后一行包含 NN 个整数 D1,D2,…,DND_1,D_2,\ldots,D_N,表示在每个地点结束旅行时需要支付的终点费用。

输出格式

输出 NN 行,每行一个整数。第 ii 行表示从地点 ii 出发、前往其他地点时能够产生的最大旅行费用。

样例

2
1 2 3
100 1
4
103

样例解释

从地点 11 出发,只能选择地点 22 作为终点,总费用为 3+1=43+1=4。

从地点 22 出发,只能选择地点 11 作为终点,总费用为 3+100=1033+100=103。

数据范围

对于 100% 的数据,保证 2≤N≤2×1052\le N\le 2\times 10^5,1≤Ai,Bi≤N1\le A_i,B_i\le N,1≤Ci≤1091\le C_i\le 10^9,1≤Di≤1091\le D_i\le 10^9。

输入的道路构成一棵树。