题目描述
小杨负责维护一棵包含 个节点的有根树(根为节点 ),每个节点有一个初始点权 。接下来要处理 次操作,操作分两种:
1 u x:将节点 的子树中所有节点的点权增加 ;2 u:查询节点 的子树中所有节点的点权之和。
请对每一次查询输出答案。
输入格式
第一行两个整数 n, q。
第二行 n 个整数 a_1, a_2, ..., a_n。
接下来 n-1 行,每行两个整数 u, v,表示一条树边。
接下来 q 行,每行一次操作,格式如题所述。
输出格式
对于每个 2 操作,输出一行一个整数表示答案。
样例输入
5 3
1 2 3 4 5
1 2
1 3
2 4
2 5
1 2 10
2 2
2 1
样例输出
41
45
样例解释
初始点权为 [1, 2, 3, 4, 5],树边为 1-2、1-3、2-4、2-5,所以子树 2 = {2, 4, 5}。
第一次操作:子树 2 中每个点加 10,点权变为 [1, 12, 3, 14, 15]。
第二次操作:子树 2 求和 = 12 + 14 + 15 = 41。
第三次操作:整棵树求和 = 1 + 12 + 3 + 14 + 15 = 45。
数据范围
- 1 <= n, q <= 200000
- |a_i|, |x| <= 10^9
- 答案可能超过 32 位整数范围,请使用 64 位整数