生长之树
该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。
题目描述
33DAI 得到了一棵有根树,根是 号点,一开始树上只有一个 号点。每个点上写着一个整数,一开始全都是 。
接下来 33DAI 要依次执行 次操作,操作有两种:
1 v:给 号点添加一个儿子。记操作前树的大小为 ,则这个新点的编号是 ,它上面写的数是 。2 v x:把 号点当前的子树( 自己以及此时已经存在的所有后代)里每个点上的数都加上 。
新出现的点上的数是 ,它不会被之前执行过的操作二影响;一次操作二也只影响它执行时已经存在的点。
所有操作执行完之后,33DAI 想知道最终树中每个点上的数。
输入格式
从文件 grow.in 读入数据。
第一行包含一个整数 (),表示测试用例组数。
接下来依次给出 组测试用例,每组测试用例的格式为:
第一行包含一个整数 (),表示操作次数。
接下来 行,每行描述一次操作,格式为下列两种之一(含义见题目描述):
1 v;2 v x。
输出格式
输出到文件 grow.out。
对每组测试用例输出一行:这一组操作全部执行完之后,设树的大小为 ,则按编号从小到大输出 号点上的数,相邻两个数之间用一个空格分隔。
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
7 5 8 6 2
1 0 1
4 14 4
样例 1 解释
第一组测试用例中, 次操作依次为:
2 1 3:只有 号点,它加上 ;1 1:给 号点添加儿子,新点是 号点,它的数是 ;2 2 1: 号点的子树只有它自己,加上 ;1 1:给 号点添加儿子,新点是 号点,它的数是 ;2 3 2: 号点的子树只有它自己,加上 ;1 3:给 号点添加儿子,新点是 号点,它的数是 ;2 1 4: 号点的子树是全部 个点,都加上 ;1 3:给 号点添加儿子,新点是 号点,它的数是 ;2 3 2: 号点的子树是 号点,都加上 。
于是 号点上的数是 , 号点上的数是 , 号点上的数是 , 号点上的数是 , 号点上的数是 ,按编号输出就是 7 5 8 6 2。
第二组测试用例中, 号点上数的变化依次为 、、,合计 ; 号点是在第二次操作时出现的,它出现之前的加值操作都不算在它头上,它只经历最后一次 ,所以 号点是 、 号点是 ,最终输出 1 0 1。
第三组测试用例中,两次 1 1 让 号点与 号点都成为 号点的儿子;前两次 2 1 分别给 号点的子树加上 与 ,两次操作时 号点都已经存在,所以它们各得到 , 号点是 ;最后的 2 2 10 只加给 号点的子树,于是 号点上的数是 , 号点是 ,按编号输出就是 4 14 4。
样例 2
样例 3
数据范围
对于所有测试数据,保证:
- ;
- ;
- 每个测试用例中,执行每次操作前 ,其中 是当时树的大小;
- 操作二中的 满足 ;
- 所有测试用例的 之和不超过 。
子任务
本题共 20 个测试点,按测试点计分:
| 测试点 | 分值 | 每个测试点 | 特殊限制 |
|---|---|---|---|
| 所有加点操作都在加值操作之前 | |||
| 无额外限制 |
每个测试点单独评分,全部测试点的得分之和即为本题得分。