#P10759. [BalticOI 2024] Jobs

[BalticOI 2024] Jobs

题目背景

翻译自 BalticOI 2024 Day1 T1

题目描述

目前,你可以选择从 11NN 编号的 NN 个一次性工作。

完成第 ii 个工作将给你带来 xx 欧元的利润,当然,利润也可能是负的。

有些工作依赖于另一个工作。也就是说,可能有一个编号为 pp 的工作必须在第 ii 个工作开始之前完成。因此,一个利润较大的工作如果依赖于一个利润为负的工作,看起来收益可能会比较小。

如果 p=0p = 0,则第 ii 个工作没有依赖。

你目前有 ss 欧元,可以决定做哪些工作以及以什么顺序去做,只要尊重依赖关系。此外,你所拥有的钱数在任何时候都不能变成负数。

请计算通过选择按照某种顺序完成(也可能某些选择不完成)这 NN 个工作所能获得的最大利润。

输入格式

第一行包含两个整数 NNss,分别是工作的数量和你最初拥有的金额。

接下来的 NN 行,每行包含两个整数 xxpp,分别是第 ii 个工作的利润和它所依赖的前置工作的编号。如果 p=0p = 0,则第 ii 个工作没有依赖。

输出格式

你的程序应该输出一个整数,即你能够获得的最大利润。

6 1
3 0
-3 1
-5 0
2 1
6 3
-4 5
6

提示

分别选择 1,4,3,51,4,3,5 号工作即可,总利润为 3+25+6=63+2-5+6 = 6

子任务编号 特殊性质 分值
11 s=1018s = 10^{18} 1111
22 N2000N \leq 2000 且满足性质 A 1414
33 满足性质 A 1515
44 N2000N \leq 2000 2929
55 无特殊性质 3131
  • 性质 A:每个 pip_i 要么是 00,要么是 i1i-1

对于所有的数据,1N3×1051 \leq N \leq 3 \times 10^50s10180 \leq s \leq 10^{18}109xi109-10^9 \leq x_i \leq 10^90pi<i0 \leq p_i < i