CF1942H.Farmer John's Favorite Intern
NOI/NOI+/CTSC
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
⠀
Ruby 刚刚通过编程竞赛赢得了 Farmer John 农场的实习机会!作为新招募的实习生,Ruby 的任务是维护 Farmer John 的桃树,这棵树有 n 个结点,以结点 1 为根。每个结点初始时有 ai=0 个桃子,并且有两种事件可能发生:
- 在某个结点 x 处的生长事件:Ruby 必须选择 x 的父结点或 x 的子树中的任意一个结点,并将其桃子数量增加 1。
- 在某个结点 x 处的收获事件:Ruby 必须选择 x 的子树中的一个结点,并将其桃子数量减少 1。注意,这与生长事件可选的结点集合不同。
注意,x 的子树包括结点 x 本身。Ruby 还得到了一个长度为 n 的数组 b。当且仅当对每个结点 i 都有 ai≥bi 时,这棵桃树才被认为是健康的。
Ruby 需要执行 q 个操作,操作有两种类型:
- 1 x v — 在结点 x 上执行 v 次生长事件。Ruby 每次可以选择不同的结点进行增加。
- 2 x v — 在结点 x 上执行 v 次收获事件。Ruby 每次可以选择不同的结点进行减少。
对于每个操作前缀,Ruby 想知道是否存在一种顺序执行这些操作的方法,使得最终的桃树是健康的。注意,Ruby 不能执行会导致某个 ai 变为负数的收获事件。
每个前缀互相独立,也就是说,对于某个操作,Ruby 可以在包含该操作的每个前缀中选择不同的结点来执行事件。
输入格式
第一行包含一个整数 t(1≤t≤104)——表示测试用例的数量。
每个测试用例的第一行包含两个整数 n 和 q(1≤n,q≤2×105)——表示树的结点数和操作数。
第二行包含 n−1 个整数 p2,p3,…,pn(1≤pi<i)——表示每个结点的父结点编号。
第三行包含 n 个整数 b1,b2,…,bn(0≤bi≤106)——表示每个结点所需的最少桃子数。
接下来的 q 行,每行描述一个操作,包含三个整数 t,x,v(1≤t≤2,1≤x≤n,1≤v≤106)。如果 t=1,表示在结点 x 上执行 v 次生长事件;如果 t=2,表示在结点 x 上执行 v 次收获事件。
保证所有测试用例中 n 的总和不超过 2×105,q 的总和不超过 2×105。
输出格式
对于每个测试用例,输出 q 行。第 i 行输出 "YES"(不区分大小写),如果 Ruby 能够在某种顺序下完成前 i 个操作后使桃树健康,否则输出 "NO"。
你可以用任意大小写输出答案,例如 "yEs"、"yes"、"Yes" 和 "YES" 都会被认为是肯定的回答。
输入输出样例
输入#1
2 8 8 1 1 1 4 3 6 6 5 6 2 9 8 4 1 3 1 3 14 1 4 17 1 2 7 2 2 1 1 6 1 2 1 1000000 1 4 999999 1 3 1 10 20 1 1 1 2 5 2 4 7 2 311353 270334 74853 385085 315501 183346 234819 417314 103862 429437 1 1 837541 1 10 933876 1 1 565958 1 4 791455 2 3 85054 2 3 440978 1 4 981040 1 5 68522 2 1 858305 2 4 184308 1 4 905081 2 8 519626 2 2 269090 1 1 43016 2 2 517644 1 5 355792 1 9 319241 2 10 125447 2 10 523890 1 10 241045
输出#1
NO NO YES NO YES NO NO YES NO NO NO YES YES NO NO YES YES NO YES YES NO YES NO NO YES YES NO NO
说明/提示
对于第一个测试用例中包含操作 1,2,…,5 的前缀,Ruby 可以按如下顺序执行操作:
- Ruby 执行操作 2,选择将 a4 增加 9,a5 增加 8。
- Ruby 执行操作 1,选择将 a1 增加 5,a3 增加 2,a6 增加 4,a8 增加 3。
- Ruby 执行操作 3,选择将 a2 增加 7。
- Ruby 执行操作 4,选择将 a2 减少 1。
- Ruby 执行操作 5,选择将 a7 增加 1。
由 ChatGPT 4.1 翻译
输入解题思路,AI测评打分。不知道怎么写?