题目描述
给定一棵 $N$ 节点的无权重树(根节点为 $1$),每个节点有权值 $v[i]$。树结构由数组 $p[i]$ 定义:节点 $i+1$ 的父节点是 $p[i]$($1 \leq i \leq N-1$)。
定义函数 $f(y) = \sum_{x \in S_y} d(x,y) \cdot v[x]$,其中:
- $S_y$ 表示所有以 $y$ 为祖先的节点集合
- $d(x,y)$ 表示节点 $x$ 到 $y$ 的距离
处理 $Q$ 个查询,每个查询包含 $x$ 和 $y$,**保证$x$在$y$子树当中**,需要 **临时**(查询结束后树恢复原状) 执行以下操作后计算 $f(y)$:
1. 将 $x$ 的所有子节点挂到 $x$ 的原父节点下
2. 从树中移除 $x$
3. 令$y$ 的儿子中,包含 $x$ 的为 $z$,将 $x$ 重新插入到 $y$ 与$z$之间
**特殊的,若$x$为$y$的儿子,则树的形状保持不变**
输入格式
第一行包含 $N$ 和 $Q$($1 \leq N, Q \leq 5 \times 10^5$)
第二行包含 $N$ 个整数 $v[i]$($1 \leq v[i] \leq 10^6$)
第三行包含 $N-1$ 个整数 $p[i]$($1 \leq p[i] \leq i$)
接下来 $Q$ 行每行两个整数 $x$ 和 $y$ $(1\le x, y \le N)$
输出格式
输出 $Q$ 行,每行为查询对应的 $f(y)$
样例输入 #1
3 1
1 2 3
1 2
3 1
样例输入 #2
3 2
4 5 6
1 1
2 1
3 1
样例输入 #3
5 3
2 5 2 2 2
1 2 3 2
4 3
3 2
5 1
提示
第一个样例解释:
- 修改后节点 $3$ 与 $1$ 距离为 $1$,节点 $2$ 与 $1$ 距离为 $2$
- $f(1) = 1 \cdot 3 + 2 \cdot 2 = 7$