logo AlgoBeat OnlineJudge
登录 注册

#103589. [BZOJ 3589] 动态树

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

题目描述

别忘了这是一棵动态树,每时每刻都是动态的。

小明要求你在这棵树上维护两种事件:

事件
这棵树长出了一些果子,即某个子树中的每个节点都会长出 个果子。

事件
小明希望你求出几条树枝上的果子数。一条树枝其实就是一个从某个节点到根的路径的一段。

每次小明会选定一些树枝,让你求出在这些树枝上的节点的果子数的和。注意,树枝之间可能会重合,这时重合的部分的节点的果子只要算一次。

输入格式

第一行一个整数 ,即节点数。
接下来 行,每行两个数字 。表示果子 和果子 之间有一条直接的边。节点从 开始编号。
再接下来一个整数 ,表示事件。
最后 行,每行开头要么是 ,要么是
如果是 ,表示这个事件是事件 。这行接下来的 个整数 表示以 为根的子树中的每个节点长出了 个果子。
如果是 ,表示这个事件是事件 。这行接下来一个整数 ,表示这次询问涉及 个树枝。接下来 对整数 ,每个树枝从节点 到节点 。由于果子数可能非常多,请输出这个数模 的结果。

输出格式

对于每个事件 ,输出询问的果子数。

样例

样例输入 #1

5
1 2
2 3
2 4
1 5
3
0 1 1
0 2 3
1 2 3 1 1 4

样例输出 #1

13

数据范围与提示

对于 的数据,

生成每个树枝的过程是这样的:先在树中随机找一个节点,然后在这个节点到根的路径上随机选一个节点,这两个节点就作为树枝的两端。

By 佚名提供