CF916E Jamie and Tree

题目描述

令你吃惊的是,Jamie 竟然是最终 BOSS!Ehehehe。 Jamie 给了你一棵有 $n$ 个结点的树,结点编号为 $1$ 到 $n$。起初,树的根为编号为 $1$ 的结点。同时,每个结点上都有一个值。 Jamie 还给了你三种类型的操作如下: $1\ v$ —— 将树的根更改为编号为 $v$ 的结点。 $2\ u\ v\ x$ —— 对于包含 $u$ 和 $v$ 的最小子树中的每个结点,将其值加上 $x$。 $3\ v$ —— 查询编号为 $v$ 的结点的子树内所有结点的值之和。 对于一个结点 $v$ 的子树,定义为所有从该结点到当前树根的最短路径经过 $v$ 的所有结点的集合。注意,改变树根后,一个结点的子树也会发生变化。 向 Jamie 展示你的编程实力,准确地完成这些操作吧!

输入格式

输入的第一行包含两个用空格分隔的整数 $n$ 和 $q$($1 \leq n \leq 10^{5}, 1 \leq q \leq 10^{5}$),分别表示树中结点数和需要处理的操作数。 第二行包含 $n$ 个用空格分隔的整数 $a_1,a_2,\ldots,a_n$($-10^{8} \leq a_i \leq 10^{8}$),表示每个结点的初始值。 接下来的 $n-1$ 行,每行包含两个空格分隔的正整数 $u_i, v_i$($1 \leq u_i, v_i \leq n$),描述树中的一条无向边。 接下来的 $q$ 行每行为一个操作格式,格式如下: $1\ v$($1 \leq v \leq n$),表示第一种操作。 $2\ u\ v\ x$($1 \leq u, v \leq n,-10^{8} \leq x \leq 10^{8}$),表示第二种操作。 $3\ v$($1 \leq v \leq n$),表示第三种操作。 所有操作参数均为整数。 操作需按给定顺序依次执行。保证给定的结构是一棵合法的树。

输出格式

对于每个第三种操作,输出一个答案。保证至少会有一个第三种操作。

说明/提示

下图展示了第一个样例中,经过操作后树结构的变化。 ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF916E/9b296178af98e90dbbac00c785fb2ed88745e7bd.png) 由 ChatGPT 5 翻译