AT_tkppc3_i 王国と M 種類の店
题目描述
PAKEN 王国是一片由 $N$ 个顶点构成的树状结构。树中的每个顶点 $i$($2 \leq i \leq N$)与顶点 $P_i$ 通过一条长度为 $L_i$ 的边相连。
在这个王国中,有 $M$ 种不同类型的商店,比如文具店、超市等(我们将它们称作为种类 $1$、种类 $2$、至种类 $M$)。每个顶点上恰好有一家商店,且顶点 $i$ 上的商店类型为 $R_i$。
对于每个顶点 $i$,我们定义其「不便度」为从顶点 $i$ 出发到达最近的各类型商店的最短距离总和,也就是到最近的种类 $1$ 的商店的距离、加上到种类 $2$ 的商店的距离,直至加上到种类 $M$ 的商店的最短距离。
你的任务是计算出顶点 $1$、顶点 $2$、一直到顶点 $N$ 这每一个顶点的「不便度」。
输入格式
输入包含以下内容,以标准输入形式给出:
- 第一行两个整数 $N$ 和 $M$,分别表示顶点数和商店种类数。
- 第二行包含 $N-1$ 个整数,依次为 $P_2, P_3, \ldots, P_N$,表示边的起点。
- 第三行包含 $N-1$ 个整数,依次为 $L_2, L_3, \ldots, L_N$,表示边的长度。
- 第四行包含 $N$ 个整数,依次为 $R_1, R_2, R_3, \ldots, R_N$,表示各顶点上的商店类型。
输出格式
共输出 $N$ 行,每行一个整数,表示对应顶点的「不便度」。
说明/提示
### 注意
每个测试用例的输入数据量较大,可能达到 $7.5\ \text{MB}$,因此在 C++ 中建议使用 `scanf` 和 `printf` 以替代 `cin` 和 `cout`。
### 制约
- $1 \leq N \leq 400,000$
- $1 \leq M \leq 400,000$
- $1 \leq P_i \leq i - 1$
- $1 \leq L_i \leq 1,000,000$
- $1 \leq R_i \leq M$
- 每种商店类型至少存在一个。
### 子任务
1. 子任务 1 \[ $55$ 分 \]: $N \leq 1,500$,$M \leq 750$。
2. 子任务 2 \[ $110$ 分 \]: $N, M \leq 70,000$ 且 $N = M$。
3. 子任务 3 \[ $275$ 分 \]: $N, M \leq 70,000$ 且每种商店类型最大仅有 $8$ 个。
4. 子任务 4 \[ $330$ 分 \]: $N, M \leq 70,000$。
5. 子任务 5 \[ $330$ 分 \]: $N, M \leq 400,000$。
**本翻译由 AI 自动生成**