升!龙!
题号:NC292413
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 1024 M,其他语言2048 M
64bit IO Format: %lld

题目描述

\hspace{15pt}Askalana获得了不少金币,心满意足,她悠闲地漫步在梦境中,在出口的位置,她看到了一棵树。
\hspace{15pt}这棵树好像不怎么美!大魔法师Askalana准备在离开之前稍微给它打理打理。
\hspace{15pt}树共有 n 个节点,编号为 1n,其中节点 1 为根节点。每个节点都有一个正整数权值 a_i。定义这棵树的价值为:所有从根节点出发,到任一叶节点的简单路径上,经过节点的权值之和的最大值。
\hspace{15pt}大魔法师Askalana不知从何下手,她申请一次场外援助,随机call一个好盆友帮她当评审。
\hspace{15pt}一共 q 次操作,每一个操作,Askalana会将节点 x 与其父亲节点断开,并将其重新挂接到节点 y 上,使得 x 成为 y 的子节点。题目保证每次操作后,树仍然是以节点 1 为根的合法树(即操作不会把 x 挂接到它自己的子树上)。请你在每次操作后,计算并输出改造后的树的价值。随后,Askalana会把树恢复到最初状态,然后再进行下一次操作。

\hspace{15pt}从节点 u 到节点 v简单路径定义为从节点 u 出发,以节点 v 为终点,随意在树上走,不经过重复的点和边走出来的序列。可以证明,在树上,任意两个节点间有且仅有一条简单路径。

输入描述:

\hspace{15pt}第一行输入两个整数 n,q\left(4 \leqq n \leqq 2 \times 10^5;\ 1 \leqq q \leqq 2 \times 10^5\right) 代表树上的节点数量、操作次数。 
\hspace{15pt}第二行输入 n 个正整数 a_1, a_2, \dots, a_n \left(1 \leqq a_i \leqq 10^9\right),其中第 i 个整数 a_i 代表第 i 个节点的点权。
\hspace{15pt}第三行输入 n - 1 个正整数 p_2, p_3, \dots, p_n \left(1 \leqq p_i \leqq n \right),其中第 i 个整数 p_i 代表第 i 个节点的父节点编号。
\hspace{15pt}此后 q 行,每行输入两个整数 x, y \left(2 \leqq x \leqq n;\ 1 \leqq y \leqq n \right) 代表依次操作。保证每一次操作后,树依旧为以节点 1 为根的合法树。

输出描述:

\hspace{15pt}对于每一次操作,新起一行。输出一个整数代表操作后树的新价值。
示例1

输入

复制
6 1
2 10 4 7 1 1
1 1 3 3 1
4 6

输出

复制
12