【题目描述】
给定一棵 n 个点的树,初始时第 i 个点有点权 ai,执行 q 次操作。
有如下两种操作:
1. 1 u v x:将路径 (u, v) 上的点的权值加上 x。
2. 2 l r:询问编号在 [l, r] 内的点的权值之和。
【输入格式】
第一行,两个正整数 n, q,分别表示树的节点个数和操作次数。
第二行,n 个正整数 a1, a2, · · · , an,表示初始点权。
接下来 n − 1 行,每行两个正整数 u, v,表示树上的一条边 (u, v)
接下来 q 行,每行表示一个操作,具体格式已在题目描述中给出。
【输出格式】
对于每个 2 操作,输出一行一个数表示询问的答案。
【样例 1 输入】样例 2,3
7 7 1 1 7 4 9 3 4 2 3 3 6 4 5 5 7 6 1 1 7 2 4 5 1 4 4 6 2 2 7 1 6 3 7 1 1 5 1 1 6 7 4 2 1 3 【样例 1 输出】 13 34 21
【数据范围与提示】
对于所有测试点:1 ≤ n, q ≤ 10^5,1 ≤ ai ≤ 10^5,1 ≤ x ≤ 10^5,1 ≤ l ≤ r ≤ n。
每个子任务的具体限制见下表:
子任务编号 | n, q ≤ | 特殊限制 | 分数 | 子任务依赖 |
---|---|---|---|---|
1 | 5000 | 无 | 20 | 无 |
2 | 10^5 | 保证树是一条链 | 30 | 1 |
3 | 无 | 50 | 1,2 |