#5104. 树上询问 II

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

题目描述

给出一个 N 个节点的树,初始根节点为 1 ,每个节点有一个权值 W_i

现有如下 M 个操作:

  1. 询问 x 的子树(包括自身)的权值和。
  2. x 的子树中所有节点的权值加上一个数 v
  3. 将该树根节点换成一个节点 x

请对于每个 1 操作,输出查询的结果,答案对 19260817 取模。

输入格式

第一行有一个数 N

接下来一行有 N 个数,第 i 个数表示编号为 i 的节点的初始权值。

接下来 N - 1 行,每行有两个数 x, y ,表示一条边。

接下来一行有一个数 M

接下来 M 行,每行一定是以下三种之一。

  • 1 x
  • 2 x v
  • 3 x

分别对应上面三种操作。

输出格式

对于每个操作 1,输出一行一个整数表示答案。

样例

样例输入

5
20 4 10 0 5
2 1
3 2
4 1
5 2
6
1 5
3 2
1 2
1 3
2 1 18
1 1

样例输出

5
39
10
56

数据范围与提示

1 \leq N, M \leq 10^5

0 \leq W_i, v \leq 10^6


没有人帮忙检验这道题 std 是否正确,不过样例是肯定没问题的。