SP17732 SALMAN - Salary Management

题目描述

**工资管理** 你是一名 Moogle 公司的软件工程师,老板希望你开发一个程序,用于有效地处理公司员工的薪资管理。首先,我们需要了解公司的员工结构。每位员工都有一个编号,编号范围从 1 到 $N$。编号为 1 的员工是总经理,是所有员工的最高领导者。除了总经理,每位员工都有一个直接上司,并且没有员工拥有多个直接上司。现在老板希望程序能够执行以下操作: 1. 给定一个员工编号,计算该员工及其所有下属(包含其自身)的工资总和。 2. 给定一个员工编号,将该员工及其所有下属的工资(包含其自身)增加。这次增加的金额为这些员工中的最低工资与 1000 之间的较小值。 举例说明: 考虑如下结构图: ![员工层级](http://dl.dropboxusercontent.com/u/34972503/draw.png) 假设工资表如下: | 编号 | 工资 (BDT) | |------|------------| | 1 | 500 | | 2 | 300 | | 3 | 200 | | 4 | 100 | | 5 | 10 | | 6 | 200 | | 7 | 100 | 如果老板要求对编号为 2 的员工执行第一种操作,则输出结果为: 300 + 100 + 200 = 600 BDT 如果老板要求对编号为 1 的员工执行第二种操作,则工资表将变为: | 编号 | 工资 (BDT) | |------|------------| | 1 | 510 | | 2 | 310 | | 3 | 210 | | 4 | 110 | | 5 | 20 | | 6 | 210 | | 7 | 110 | 因为编号为 5 的员工最低工资为 10,小于 1000,因此增加 10。

输入格式

输入的第一行为一个整数 $T$,表示测试用例的数量。 每个测试用例的第一行是一个空行。接下来的一行包含两个整数 $N$ 和 $q$,分别表示员工总数和查询次数。员工编号从 1 到 $N$。 随后有 $N$ 行,每行有两个整数 $p_i$ 和 $s_i$,分别表示第 $i$ 个员工的直接上司编号和工资。可以假定编号为 1 的员工为总经理,其上司编号为 0。 接下来的 $q$ 行中,每行描述一个查询,包含两个整数 $c$ 和 $v$。其中,$c$ 指明操作类型,$v$ 为员工编号。如果 $c = 1$,表示进行第一种操作;如果 $c = 2$,表示进行第二种操作。 输入数据保证构成一棵有效的有根树。

输出格式

对于每个测试用例,首先输出一行 "Case X:",其中 X 表示测试用例编号。然后,针对每个类型为 1 的查询输出工资总和。

说明/提示

- 测试用例数量 $1 \le T \le 10$ - 员工总数 $1 \le N \le 10^5$ - 查询次数 $1 \le q \le 10^5$ - 上司编号 $0 \le p_i \le N$ - 工资 $0 \le s_i \le 10^9$ 考虑到数据规模较大,建议使用更高效的输入输出方法。 题目作者:Ahmad Faiyaz 特别感谢:Syed Shahriar Manjur **本翻译由 AI 自动生成**