146 DFS 序 3,树上差分 1

内存限制:256 MB 时间限制:2000 ms

题目描述

这是一道模板题。

不保证无快读的程序能过。请务必使用快读。

给一棵有根树,这棵树由编号为 $1\dots N$ 的 $N$ 个结点组成。根结点的编号为 $R$。每个结点都有一个权值,结点 $i$ 的权值为 $v_i$。
接下来有 $M$ 组操作,操作分为三类:

  • 1 a b x,表示将「结点 $a$ 到结点 $b$ 的简单路径」上所有结点的权值都增加 $x$;
  • 2 a,表示求结点 $a$ 的权值。
  • 3 a,表示求 $a$ 的子树上所有结点的权值之和。

输入格式

第一行有三个整数 $N,M$ 和 $R$。
第二行有 $N$ 个整数,第 $i$ 个整数表示 $v_i$。
在接下来的 $N-1$ 行中,每行两个整数,表示一条边。
在接下来的 $M$ 行中,每行一组操作。

输出格式

对于每组 $\texttt{2 a}$ 操作,输出一个整数,表示结点 $a$ 的权值。
对于每组 $\texttt{3 a}$ 操作,输出一个整数,表示 $a$ 的子树上所有结点的权值之和。

样例 1

样例 2

数据范围与提示

$40\%$ 的数据不含操作 3。
对于所有数据,$1\leqslant N, M\leqslant 10^6,$ $1\leqslant R\leqslant N,$ $-10^6\leqslant v_i, x\leqslant 10^6$.

样例

样例输入 1

10 15 3 4 8 -2 -4 -7 -7 -9 5 2 5 3 9 3 4 4 5 4 8 8 7 3 6 8 2 9 10 2 1 2 5 1 4 7 3 1 7 2 6 1 6 7 -7 2 1 1 10 10 -9 2 4 1 2 9 -8 2 6 1 10 5 -2 1 4 4 6 1 6 1 3 1 1 10 2 1 9 2 0 2 7

样例输出 1

-7 4 -8 -14 -7

样例输入 2

10 17 3 5 1 -7 -9 -5 3 -7 -5 3 3 1 8 8 7 7 6 8 3 6 10 7 2 6 9 1 4 6 5 2 9 1 10 4 -2 2 8 1 1 10 -2 3 5 1 10 6 -3 3 1 1 6 5 9 2 8 1 4 5 1 2 10 1 2 5 6 1 2 6 0 1 2 7 -5 1 4 9 6 1 10 1 0 3 2

样例输出 2

3 -7 -5 -10 -9 -4 2