P12693 BZOJ3589 动态树

题目描述

别忘了这是一棵动态树,每时每刻都是动态的。 小明要求你在这棵树上维护两种事件: - 事件 0:这棵树长出了一些果子,即某个子树中的每个节点都会长出 $k$ 个果子。 - 事件 1:小明希望你求出几条树枝上的果子数。一条树枝其实就是一个从某个节点到根的路径的一段。 每次小明会选定一些树枝,让你求出在这些树枝上的节点的果子数的和。注意,树枝之间可能会重合,这时重合的部分的节点的果子只要算一次。

输入格式

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

输出格式

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

说明/提示

对于 $100\%$ 的数据,$1 \leq n \leq 2 \times 10^5$,$1 \leq Q \leq 2 \times 10^5$,$k = 5$。 生成每个树枝的过程是这样的:先在树中随机找一个节点,然后在这个节点到根的路径上随机选一个节点,这两个节点就作为树枝的两端。