世界树的呼唤
题号:NC231903
时间限制:C/C++/Rust/Pascal 4秒,其他语言8秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

世界树正在腐化!

为了阻止世界树继续腐化,需要每个世界的力量

世界树上一共有 n 个世界,每个世界可能是魔法世界,修真世界...,世界树上最多有 10 种世界。

世界树是一棵树,每个世界都能沿着树边向世界树根发送一个能量为 v 的能量脉冲。

当两个相同类型的世界 的能量脉冲第一次碰撞在一起时, 会分别在发生碰撞的世界 p 留下的能量脉冲残留值,同一脉冲在一个世界发生多次碰撞只会产生一次能量残留。脉冲的起始点为发送脉冲的世界,终止点为世界树根,起始点和终止点都有可能发生碰撞。

由于世界树的腐化,世界树上会发生 m 次动荡,动荡有两种类型。

将世界 a 的能量脉冲留下的残留清除,重新发送一个能量值为 x 的能量脉冲。

询问世界 b 的残留能量值。

输入描述:

第一行 ,代表有 n 个世界,m 次动荡。

第二行 n 个数,代表每个世界的类型, 第 i 个数 代表世界 i - 1 的类型。

第三行 n 个数,代表每个世界的脉冲能量值, 第 i 个数 代表世界i - 1的能力脉冲值。

接下来 n - 1 行,每一行, 代表世界 u 和世界 v 之间有一条树边。

保证输入的是一颗树,世界 0 为世界树根。

接下来 m 行,每一行代表一个操作。

输出描述:

对于类型 2 的询问,输出一行整数,代表对应世界的能量残留值
示例1

输入

复制
4 4
1 0 2 0
2 4 4 1
0 1
0 2
0 3
2 0
1 1 2
2 0
2 1

输出

复制
9
3
0
示例2

输入

复制
4 5
8 8 6 1
4 2 9 1
1 3
2 3
0 2
2 3
1 3 8
1 2 4
2 0
2 1

输出

复制
0
6
0
示例3

输入

复制
3 3
1 0 0
2 4 4
0 1
1 2
2 1
1 1 2
2 1

输出

复制
0
6