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](https://img.atcoder.jp/code-thanks-festival-2018/167d324c9d4efc74fe4af7b0d9738856.png) - 第 1 枚硬币从顶点 2 移动到 1 上 ![操作2](https://img.atcoder.jp/code-thanks-festival-2018/1da85bc38dcc1368f89da22118ad8dc3.png) - 第 2 枚硬币放在顶点 2 上 ![操作3](https://img.atcoder.jp/code-thanks-festival-2018/1cd253badfe6a1a8a46a5196d53c03e4.png) - 第 2 枚硬币从顶点 2 移动到 3 上 ![操作4](https://img.atcoder.jp/code-thanks-festival-2018/7ce7c8fc1e9d93cedcf65f269b95fbd7.png) 上图中,第 1 枚硬币用红色表示,第 2 枚硬币用蓝色表示。 ### 样例解释 2 无法进行 5 次操作,请输出 $-1$。 由 ChatGPT 4.1 翻译