A. 马

内存限制:256 MiB 时间限制:1000 ms 标准输入输出
题目类型:传统 评测方式:文本比较

题目描述

  原试题 pdf 见附件。


  你是能看到第一题的 friends 呢。   ——hja

  众所周知,小葱同学擅长计算,尤其擅长计算组合数,但这个题和组合数没 什么关系。

  还记得我们在课上讲过这么一道题,给定一棵树,有三种不同的操作,询问子树点权和、修改子树链权值和换根操作。现在我们把这个题换一下,变成一个新的问题,你需要支持以下三种操作:

  1. 询问树上一条链的点权和。

  2. 将某个点点权 +v

  3. 将树的根换为点 p

输入格式

  第一行两个整数 N, M 代表树的点数和操作次数。

  接下来一行 N 个数代表树上每个点的点权。

  接下来 N - 1 行每行两个数代表树上一条边。

  接下来 M 行,每行第一个数 opt 代表操作的种类数。如果 opt = 1 ,接下来会有两个数 p_1, p_2 代表询问的两个点;如果 opt = 2 ,接下来会有两个数 p, v ;如果 opt = 3 ,接下来会有一个数 p

输出格式

  对于每个第一种操作,输出一行一个数代表答案。

样例

样例输入

3 3
1 2 3
1 2
2 3
1 1 3
2 1 1
1 1 3

样例输出

6
7

数据范围与提示

  对于 40\% 的数据, N, M \leq 1000

  对于另外 20\% 的数据,没有操作 3。

  对于 90\% 的数据,没有操作 2。

  对于 100\% 的数据, 1 \leq N, M \leq 10^5 ,所有点初始点权以及 v 都不超过 1000