2568. 树链剖分

给定一棵树,树中包含 $n$ 个节点(编号 $1 \sim n$),其中第 $i$ 个节点的权值为 $a_i$。

初始时,$1$ 号节点为树的根节点。

现在要对该树进行 $m$ 次操作,操作分为以下 $4$ 种类型:

  • 1 u v k,修改路径上节点权值,将节点 $u$ 和节点 $v$ 之间路径上的所有节点(包括这两个节点)的权值增加 $k$。
  • 2 u k,修改子树上节点权值,将以节点 $u$ 为根的子树上的所有节点的权值增加 $k$。
  • 3 u v,询问路径,询问节点 $u$ 和节点 $v$ 之间路径上的所有节点(包括这两个节点)的权值和。
  • 4 u,询问子树,询问以节点 $u$ 为根的子树上的所有节点的权值和。

输入格式

第一行包含一个整数 $n$,表示节点个数。

第二行包含 $n$ 个整数,其中第 $i$ 个整数表示 $a_i$。

接下来 $n-1$ 行,每行包含两个整数 $x,y$,表示节点 $x$ 和节点 $y$ 之间存在一条边。

再一行包含一个整数 $m$,表示操作次数。

接下来 $m$ 行,每行包含一个操作,格式如题目所述。

输出格式

对于每个操作 $3$ 和操作 $4$,输出一行一个整数表示答案。

数据范围

$1 \le n,m \le 10^5$,
$0 \le a_i,k \le 10^5$,
$1 \le u,v,x,y \le n$

输入样例:

5
1 3 7 4 5
1 3
1 4
1 5
2 3
5
1 3 4 3
3 5 4
1 3 5 10
2 3 5
4 1

输出样例:

16
69