小清新数据结构题
题目背景
**本题时限2s,内存限制256M**
题目描述
在很久很久以前,有一棵n个点的树,每个点有一个点权。
现在有q次操作,每次操作是修改一个点的点权或指定一个点,询问以这个点为根时每棵子树点权和的平方和。
(题目不是很好懂,没看太懂的可以看看样例解释)
输入输出格式
输入格式
第一行两个整数n、q。
接下来n-1行每行两个整数a和b,表示树中a与b之间有一条边,保证给出的边不会重复。
接下来一行n个整数,第i个整数表示第i个点的点权。
接下来q行每行两或三个数,如果第一个数为1,那么接下来有两个数x和y,表示将第x个点的点权修改为y,如果第一个数为2,那么接下来有一个数x,表示询问以x为根时每棵子树点权和的平方和。
输出格式
对于每个询问输出答案。
输入输出样例
输入样例 #1
4 5
1 2
2 3
2 4
4 3 2 1
2 2
1 1 3
2 3
1 2 4
2 4
输出样例 #1
121
140
194
说明
##### 样例解释
这是一个菊花图,2与1、3、4间有边。
一开始每个点点权分别为4、3、2、1。
第一个询问以2为根,1、3、4子树中都只有本身一个点,2子树中有所有点,那么1、3、4子树中的点权和就分别是自己的点权4、2、1,2子树中的点权和就是4+3+2+1=10,$4^2+2^2+1^1+10^2=121$。
接下来将第一个点点权修改为3,每个点点权分别为3、3、2、1。
第二个询问以3为根,1、4子树中只有自己,2子树中有1、2、4,3子树中有所有点,1、4子树点权和就是自己的点权3、1,2子树点权和就是3+3+1=7,3子树点权和为3+3+2+1=9,$3^2+1^2+7^2+9^2=140$。
接下来把第二个点点权修改为4,每个点点权分别为3、4、2、1。
第三个询问以4为根,1、3子树点权和就是3和2,2子树点权和就是3+4+2=9,4子树点权和为3+4+2+1=10,$3^2+2^2+9^2+10^2=194$。
##### 数据范围
对于10%的数据,$n,q \leq 2000$。
对于40%的数据,$n,q \leq 60000$。
对于另外30%的数据,保证每次询问的根都为1。
对于100%的数据,$1 \leq n,q \leq 200000$,$-10 \leq$输入的每个点权$\leq 10$。
建议使用输入优化~~,虽然标程没加读入优化也能过~~