A93505.长大的树

普及+/提高

官方

通过率:0%

时间限制:1.00s

内存限制:128MB

题目描述

有一棵以 11 号结点为根的树。一开始树里只有 11 个结点(结点 11),并且每个结点的数值都为 00

接下来有 qq 个操作,操作有两种:

  • 1 v1\ v:给结点 vv 新增一个孩子结点。
    如果当前树里一共有 szsz 个结点,那么新结点的编号就是 sz+1sz+1,它的数值也是 00

  • 2 v x2\ v\ x:把 xx 加到“以 vv 为根的整棵子树”里的每一个结点的数值上。
    (子树的意思是:从 vv 出发往下走能到的结点都算,包括 vv 自己。)

所有操作做完后,请输出最后树中每个结点的数值。

输入格式

第一行包含一个整数 TT1T1041 \leq T \leq 10^4),表示测试用例的数量。接下来是每个测试用例的描述。

每个测试用例的第一行包含一个整数 qq1q51051 \leq q \leq 5 \cdot 10^5),表示操作的数量。

接下来的 qq 行,每行描述一个操作:

  • 第一种操作:第 ii 行包含两个整数 tit_iti=1t_i = 1)、viv_i。表示向结点 viv_i 添加一个编号为 sz+1sz+1 的子结点,其中 szsz 是当前树的结点总数。保证 1visz1 \leq v_i \leq sz
  • 第二种操作:第 ii 行包含三个整数 tit_iti=2t_i = 2)、viv_ixix_i109xi109-10^9 \leq x_i \leq 10^9)。表示将 xix_i 加到以 viv_i 为根的子树中所有结点的数值上。保证 1visz1 \leq v_i \leq sz,其中 szsz 是当前树的结点总数。

保证所有测试用例中 qq 的总和不超过 51055 \cdot 10^5

输出格式

对于每个测试用例,输出最终树中每个结点的数值。

输入输出样例

  • 输入#1

    3
    9
    2 1 3
    1 1
    2 2 1
    1 1
    2 3 2
    1 3
    2 1 4
    1 3
    2 3 2
    5
    2 1 1
    1 1
    2 1 -1
    1 1
    2 1 1
    5
    1 1
    1 1
    2 1 1
    2 1 3
    2 2 10

    输出#1

    7 5 8 6 2 
    1 0 1 
    4 14 4

说明/提示

说明/提示

在第一个样例中,最终树及其结点的数值如下图所示:

  • 结点的编号是“新建时按顺序编号”的:第一次新增的是 22,第二次新增的是 33,以此类推。
  • 操作 2 v x2\ v\ x 会把 xx 加到 vv 的子树里所有结点(包含 vv)上。
  • 最后按 1,2,3,,sz1,2,3,\dots,sz 的顺序把每个结点的值输出出来。
首页