好吧,我是Bingbong
题号:NC312843
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 1024 M,其他语言2048 M
64bit IO Format: %lld

题目描述


\hspace{15pt}Bingbong 将一套由瓶子和单向管道组成的系统抽象为一棵包含 n 个节点的有根树,节点编号为 1\sim n,根节点为 1 号节点。
每个节点 i 对应一个独立的瓶子,h_i 表示该瓶子可容纳水的最大高度。每个瓶子的横截面积均为 1 ,因此瓶子内的水量等于当前水位高度。管道内的水量忽略不计。
\hspace{15pt}对于每个节点 i(2\leq i\leq n),节点 f_i 是节点 i父节点。节点 i 与其父节点之间有一根单向管道,管道连接在父节点 f_i 对应瓶子高度为 w_i 的位置,水只能通过该管道从父节点流向节点 i。对于同一个父节点,不存在两个不同子节点连接在相同高度,即若 x\neq yf_x=f_y,则 w_x\neq w_y
\hspace{15pt}现在用无限水量的水龙头持续向根节点对应的瓶子注水。水流遵循如下规则:
\hspace{23pt}\bullet 当某个瓶子内的水位到达其子节点管道连接的高度时,水将优先流入该管道,直至该管道对应的子系统(该子节点及其子树内的所有可达瓶子)全部注满水,此后当前瓶子的水位才能继续上升(特殊的,若瓶子 i 的最大高度 h_i 处连接有子节点管道,则需等待该子系统全部注满后,方认为瓶子 i 的水量达到 h_i);
\hspace{23pt}\bullet 子节点中的注水过程同样遵循上述规则;
\hspace{15pt}对于每个节点 i(1\leq i\leq n),请计算:当节点 i 对应瓶子的水量恰好达到最大高度 h_i 时,所需的总注水量。
\hspace{15pt}这里的总注水量为此时所有瓶子内水量之和。

输入描述:

\hspace{15pt}第一行输入一个整数 n\left(2 \leq n \leq 2\times 10^5\right),表示树的节点数量。
\hspace{15pt}第二行输入 n 个整数 h_1, h_2, ..., h_n\left( 1 \leq h_i \leq 10^9\right),分别表示每个节点对应的瓶子最大容纳高度。
\hspace{15pt}第三行输入 n-1 个整数 f_2, ..., f_n\left( 1 \leq f_i \leq i-1\right),分别表示每个节点的父节点。
\hspace{15pt}第四行输入 n-1 个整数 w_2, w_3, ..., w_n\left(1 \leq w_i \leq h_{f_i}\right),分别表示每个节点连接父节点的瓶身高度。

输出描述:

\hspace{15pt}输出一行 n 个整数,依次表示节点 1 \sim n 对应瓶子最终水量达到 h_i 时的总注水量。
示例1

输入

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

输出

复制
17 15 9 14 13