AT_code_thanks_festival_2018_f Coins on the tree
题目描述
高桥君打算在一个有 $N$ 个顶点的有根树上,使用 $M$ 枚硬币,恰好进行 $K$ 次如下操作。
这棵树通过给出每个顶点 $i$ 的父节点 $p_i$ 来描述。$p_i = 0$ 的顶点为根。
每次操作可以选择以下两种之一:
- 如果根上没有硬币,可以在根上放置一个新的硬币;
或者
- 从当前有硬币的某个顶点,选择一个没有硬币的子节点,将硬币移动到该子节点上。
经过 $K$ 次操作后,必须使得 $M$ 枚硬币全部放在树上的某些顶点上。
记第 $1$ 枚、第 $2$ 枚、……、第 $M$ 枚在根上放置的硬币,最终所在的顶点分别为 $v_1, v_2, \ldots, v_M$。
高桥君想知道,这个序列 $v_1, v_2, \ldots, v_M$ 中,字典序最小的方案是什么。
序列 $u_1, u_2, \ldots, u_M$ 比序列 $v_1, v_2, \ldots, v_M$ 字典序小,指存在某个 $1 \leq i \leq M$,使得 $u_i < v_i$ 且对所有 $j < i$ 有 $u_j = v_j$。
如果无法恰好进行 $K$ 次操作,或者无法将 $M$ 枚硬币全部放到树上,请输出 $-1$。
输入格式
输入通过标准输入给出,格式如下:
> $N$ $M$ $K$ $p_1$ $p_2$ ... $p_{N-1}$ $p_N$
输出格式
如果能够在 $K$ 次操作后将 $M$ 枚硬币全部放置到树上,输出
> $v_1$ $v_2$ ... $v_{M-1}$ $v_M$
否则输出 $-1$。
说明/提示
### 限制条件
- $1 \leq M \leq N \leq 300$
- $0 \leq K \leq 10^5$
- $0 \leq p_i \leq N$
- 恰有一个 $i$ 满足 $p_i = 0$
- 以 $(i, p_i)$ 为边构成的图是一棵树
- 所有输入均为整数
### 样例解释 1
可以按如下方式操作,得到序列 $\{1, 3\}$,且无法得到字典序更小的序列。
- 第 1 枚硬币放在顶点 2 上 
- 第 1 枚硬币从顶点 2 移动到 1 上 
- 第 2 枚硬币放在顶点 2 上 
- 第 2 枚硬币从顶点 2 移动到 3 上 
上图中,第 1 枚硬币用红色表示,第 2 枚硬币用蓝色表示。
### 样例解释 2
无法进行 5 次操作,请输出 $-1$。
由 ChatGPT 4.1 翻译