A6490 | [NOIP2025] 树的价值
来源NOIP提高组 / 2025
时间限制1s
内存限制128MB
通过 / 提交0/0
题目描述
NOIP2025 T3
给定一棵 $n$ 个结点的有根树,其中结点 1 为根,结点 $i$ ($2 \le i \le n$) 的父亲结点为结点 $p_i$。
对于 $1 \le i \le n$,定义结点 $i$ 的深度 $d_i$ 为结点 1 到结点 $i$ 的简单路径的边数,也就是说,$d_1 = 0$,$d_i = d_{p_i} + 1$ ($2 \le i \le n$)。定义有根树的高度 $h$ 为所有结点的深度的最大值,即 $h = \max_{i=1}^{n} d_i$。
给定高度的上限 $m$。在本题中,给定的有根树的高度不超过 $m$。
你需要给每个结点设置一个非负整数作为它的权值。对于 $1 \le i \le n$,若结点 $i$ 的权值为 $a_i$,令 $S_i$ 表示结点 $i$ 的子树中结点权值构成的集合。对于每一种权值设置方案,定义树的价值为 $\sum_{i=1}^{n} \operatorname{mex}(S_i)$,其中 $\operatorname{mex}(S)$ 表示在集合 $S$ 中的最小非负整数。例如,在下图中,若设置 $a_1 = 3$,$a_2 = 2$,$a_3 = a_4 = 0$,$a_5 = 1$,则 $S_1 = \{0,1,2,3\}$,$S_2 = \{0,1,2\}$,$S_3 = \{0\}$,$S_4 = \{0\}$,$S_5 = \{1\}$,树的价值为 $4 + 3 + 1 + 1 + 0 = 9$。
【等待好心人上传图片】
你需要求出,在所有权值设置方案中,树的价值的最大值。
给定一棵 $n$ 个结点的有根树,其中结点 1 为根,结点 $i$ ($2 \le i \le n$) 的父亲结点为结点 $p_i$。
对于 $1 \le i \le n$,定义结点 $i$ 的深度 $d_i$ 为结点 1 到结点 $i$ 的简单路径的边数,也就是说,$d_1 = 0$,$d_i = d_{p_i} + 1$ ($2 \le i \le n$)。定义有根树的高度 $h$ 为所有结点的深度的最大值,即 $h = \max_{i=1}^{n} d_i$。
给定高度的上限 $m$。在本题中,给定的有根树的高度不超过 $m$。
你需要给每个结点设置一个非负整数作为它的权值。对于 $1 \le i \le n$,若结点 $i$ 的权值为 $a_i$,令 $S_i$ 表示结点 $i$ 的子树中结点权值构成的集合。对于每一种权值设置方案,定义树的价值为 $\sum_{i=1}^{n} \operatorname{mex}(S_i)$,其中 $\operatorname{mex}(S)$ 表示在集合 $S$ 中的最小非负整数。例如,在下图中,若设置 $a_1 = 3$,$a_2 = 2$,$a_3 = a_4 = 0$,$a_5 = 1$,则 $S_1 = \{0,1,2,3\}$,$S_2 = \{0,1,2\}$,$S_3 = \{0\}$,$S_4 = \{0\}$,$S_5 = \{1\}$,树的价值为 $4 + 3 + 1 + 1 + 0 = 9$。
【等待好心人上传图片】
你需要求出,在所有权值设置方案中,树的价值的最大值。
输入格式
本题包含多组测试数据。
输入的第一行包含一个正整数 $k$,表示测试数据组数。
接下来依次输入每组测试数据。对于每组测试数据:
- 第一行包含两个正整数 $n, m$,分别表示结点数量与高度的上限;
- 第二行包含 $n-1$ 个正整数 $p_2, p_3, \ldots, p_n$,分别表示每个结点的父亲结点。
输入的第一行包含一个正整数 $k$,表示测试数据组数。
接下来依次输入每组测试数据。对于每组测试数据:
- 第一行包含两个正整数 $n, m$,分别表示结点数量与高度的上限;
- 第二行包含 $n-1$ 个正整数 $p_2, p_3, \ldots, p_n$,分别表示每个结点的父亲结点。
输出格式
对于每组测试数据,输出一行一个非负整数,表示树的价值的最大值。
输入输出样例
输入 #1
2 5 2 1 1 2 2 7 2 1 1 2 2 2 3
输出 #1
9 13
### 【样例 1 解释】
该样例共包含两组测试数据。
对于第一组测试数据,可以设置 $a_1 = 3$,$a_2 = 2$,$a_3 = a_4 = 0$,$a_5 = 1$,则树的价值为 $4 + 3 + 1 + 1 + 0 = 9$。
对于第二组测试数据,可以设置 $a_1 = 4$,$a_2 = 3$,$a_3 = 2$,$a_4 = a_6 = 1$,$a_5 = a_7 = 0$,则树的价值为 $5 + 4 + 2 + 0 + 1 + 0 + 1 = 13$。
### 【数据范围】
对于所有测试数据,均有:
- $1 \le t \le 5$;
- $2 \le n \le 8,000$,$1 \le m \le \min(n - 1, 800)$;
- 对于所有 $2 \le i \le n$,均有 $1 \le p_i \le i - 1$;
- 给定的有根树的高度不超过 $m$。
| 测试点编号 | $n \le$ | $m \le$ |
|:----------:|:-------:|:-------:|
| $1,2$ | $7$ | $n-1$ |
| $3,4$ | $13$ | $n-1$ |
| $5,6$ | $18$ | $n-1$ |
| $7,8$ | $40$ | $n-1$ |
| $9,10$ | $120$ | $n-1$ |
| $11,12$ | $360$ | $n-1$ |
| $13,14$ | $4{,}000$ | $2$ |
| $15\sim 17$| $4{,}000$ | $10$ |
| $18,19$ | $4{,}000$ | $50$ |
| $20\sim 25$| $8{,}000$ | $800$ |
该样例共包含两组测试数据。
对于第一组测试数据,可以设置 $a_1 = 3$,$a_2 = 2$,$a_3 = a_4 = 0$,$a_5 = 1$,则树的价值为 $4 + 3 + 1 + 1 + 0 = 9$。
对于第二组测试数据,可以设置 $a_1 = 4$,$a_2 = 3$,$a_3 = 2$,$a_4 = a_6 = 1$,$a_5 = a_7 = 0$,则树的价值为 $5 + 4 + 2 + 0 + 1 + 0 + 1 = 13$。
### 【数据范围】
对于所有测试数据,均有:
- $1 \le t \le 5$;
- $2 \le n \le 8,000$,$1 \le m \le \min(n - 1, 800)$;
- 对于所有 $2 \le i \le n$,均有 $1 \le p_i \le i - 1$;
- 给定的有根树的高度不超过 $m$。
| 测试点编号 | $n \le$ | $m \le$ |
|:----------:|:-------:|:-------:|
| $1,2$ | $7$ | $n-1$ |
| $3,4$ | $13$ | $n-1$ |
| $5,6$ | $18$ | $n-1$ |
| $7,8$ | $40$ | $n-1$ |
| $9,10$ | $120$ | $n-1$ |
| $11,12$ | $360$ | $n-1$ |
| $13,14$ | $4{,}000$ | $2$ |
| $15\sim 17$| $4{,}000$ | $10$ |
| $18,19$ | $4{,}000$ | $50$ |
| $20\sim 25$| $8{,}000$ | $800$ |
C++ 编辑器
输入
输出
可保存默认模板;新题优先使用已保存模板。
当前快捷键仅展示,暂不支持修改。
- 撤销
Ctrl / ⌘ + Z - 重做
Ctrl / ⌘ + Y - 查找
Ctrl / ⌘ + F - 全选
Ctrl / ⌘ + A - 复制
Ctrl / ⌘ + C - 剪切
Ctrl / ⌘ + X - 粘贴
Ctrl / ⌘ + V - 自动排版
工具栏排版按钮 - 草稿保存
编辑时自动保存到本机
历史
提交记录
状态说明时间源码
AI
作答助手
你好,我是作答助手。可以问思路、复杂度、样例含义或代码报错原因;不会直接给出完整 AC 代码。
确定要清空代码吗?