多吃蘑菇
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 512 M,其他语言1024 M
64bit IO Format: %lld

题目描述

Crazycth 看见了穿过传送门的你,他邀请你帮助他的室友。

Crazycth 的室友经常深夜看马里奥录播,现在他正梦到自己被库巴追,被迫逃进了一个迷宫。

迷宫可以视为一棵 n 个节点的树,在第 i 个节点有一个大小 w_i,颜色为 c_i 的蘑菇。

Crazycth 的室友喜欢吃蘑菇,但是相同颜色的蘑菇他只想吃一个,同时每个节点只能经过一次。他可以瞬间算出以任一节点为终点时他所能吃的蘑菇大小总和的最大值。不过他此时忙于在迷宫入口(1 号节点)吃蘑菇,聪明的你能帮忙解决这个问题吗?

输入描述:

第一行包含一个正整数 ,表示迷宫节点的个数。

第二行包含 n 个正整数   ,分别表示第 i 个节点的蘑菇的大小。

第三行包含 n 个正整数 ,分别表示第 i 个节点的蘑菇的颜色。

接下来 n - 1 行,每行两个正整数 ,表示连接 u_i 和 v_i 的一条边 。

输入数据保证不存在重边,并且每个节点都可以由起点唯一到达,1 号节点为起点。

输出描述:

输出 n 行,第 i 行包含一个整数,即从 1 号点出发最终到达 i 号点时,能吃到的蘑菇的大小总和的最大值。
示例1

输入

复制
5
1 4 5 5 9
1 2 2 3 4
1 2
2 3
3 5
1 4

输出

复制
1
5
6
6
15