#CSES1137. 子树查询

子树查询

题目背景

翻译自 CSES-1137 题。

题目描述

给定一个包含 nn 个节点的树,其中节点 11 是根节点。每个节点都有一个值。

你的任务是处理以下两种类型的查询:

  1. 将节点 ss 的值修改为 xx
  2. 计算节点 ss 的子树中所有节点的值之和。

输入格式

第一行包含两个整数 nnqq:分别表示树中的节点数量和查询数量。节点编号为 1,2,,n1,2,…,n,根节点是节点 11

第二行包含 nn 个整数 v1,v2,,vnv_1,v_2,…,v_n:每个节点的初始值。

接下来有 n1n−1 行,每行包含两个整数 aabb:表示节点 aa 和节点 bb 之间有一条边。

最后有 qq 行查询。每行查询的格式可以是:

  • 1 s x:表示将节点 ss 的值修改为 xx
  • 2 s:表示查询节点 ss 的子树中所有节点的值之和。

输出格式

对于每个查询类型 2,输出子树中节点值的总和。

样例

5 3
4 2 5 2 1
1 2
1 3
3 4
3 5
2 3
1 5 3
2 3
8
10

说明/提示

1n,q21051 \leq n,q \leq 2 \cdot 10^5

1a,b,sn1 \leq a,b,s \leq n

1vi,x1091 \leq v_i , x\leq 10^9