AT_scpc2026_div3_b Mobilint Tensor Scheduling (REGULUS)
题目描述
Zye 正在使用 Mobilint 的 SDK 为 REGULUS 编写 AI 推理代码。由于 Zye 并不擅长编程,他编写的代码只能计算树形图。
Zye 想用这段代码计算一个有 $N$ 个张量组成的有根树状计算图。树的根为节点 $1$。树中第 $i$ 个节点代表一个大小为 $w_i$ MiB 的张量。
由叶节点表示的张量称为**输入张量**,由非叶节点表示的张量称为**结果张量**。输入张量在初始状态下已存在于内存中。初始状态下的内存占用至多为 $M$ MiB。
要计算节点 $i$ 表示的结果张量,当前必须在内存中同时存在所有子节点表示的张量。计算节点 $i$ 的结果张量时,首先需要为大小为 $w_i$ MiB 的结果张量在内存中分配空间。计算完成后,所有子节点表示的张量会从内存中移除。
某一时刻的内存占用定义为该时刻内存中所有张量大小之和。
Zye 希望通过选择合理的计算顺序,使计算根节点张量的过程中,峰值内存占用最小。峰值内存占用是指初始状态及计算过程中所有时刻的最大内存占用。
计算机的内存上限为 $M$ MiB。计算过程中,内存占用始终必须不超过 $M$ MiB。
求计算根节点结果张量时所需的最小峰值内存占用。如果无法使峰值内存占用不超过 $M$ MiB,则输出 `OOM`。
输入格式
输入由标准输入给出,格式如下:
> $N \ M \ w_1 \ w_2 \ \dots \ w_N \ p_2 \ p_3 \ \dots \ p_N$
其中,$p_i$ 表示节点 $i$ 的父节点编号。
输出格式
如果可以在峰值内存占用不超过 $M$ MiB 的情况下计算出根节点的结果张量,输出最小可能的峰值内存占用。
否则,输出 `OOM`。
说明/提示
### 样例解释 1
初始状态下,存在于内存中的张量是叶节点 $5, 6, 7, 8$ 表示的输入张量。因此,初始内存占用为 $1+1+1+1=4$ MiB。
例如,可以按如下顺序计算结果张量:
1. 计算节点 $4$ 表示的结果张量,此步最大内存占用为 $4+1=5$ MiB。
2. 计算节点 $3$ 表示的结果张量,此步最大内存占用为 $4+1=5$ MiB。
3. 计算节点 $2$ 表示的结果张量,此步最大内存占用为 $3+1=4$ MiB。
4. 计算节点 $1$ 表示的结果张量,此步最大内存占用为 $2+1=3$ MiB。
该计算顺序的峰值内存占用为 $5$ MiB。不可能使峰值内存占用不超过 $4$ MiB,因此答案为 $5$。
### 数据范围
- $2 \leq N \leq 5000$
- $M = 8192$
- $w_i = 1$
- $1 \leq p_i \leq N$
- 给定的图是一棵以节点 $1$ 为根的有根树。
- 所有输入均为整数。
由 ChatGPT 5 翻译