题号:NC15433
时间限制:C/C++/Rust/Pascal 5秒,其他语言10秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

给你一棵树,边权为1,有点权

需要支持两个操作:

1 x y z表示把树上x到y这条简单路径的所有点点权都加上z

2 x y表示查询与点x距离 <= 1的所有点里面的第y小点权

输入描述:

第一行两个数n,m
第二行n个数表示每个点的点权
之后n-1行,每行两个数x,y表示x和y之间连有一条边
之后m行
每行为1 x y z或者2 x y形式
意义如上述

输出描述:

输出m行,每行一个数表示答案
数据保证每次询问都存在答案
示例1

输入

复制
5 5
3 4 3 1 3
1 2
1 3
2 4
3 5
2 1 3
2 1 1
1 1 1 1
2 1 3
1 4 1 1

输出

复制
4
3
4

备注:

对于100%的数据,n,m<=1000000, 每次加的数 <= 2000,初始的点权<=2000
ps:这题数据加不完,欢迎大家写暴力过掉