CF1297E Modernization of Treeland
题目描述
Treeland 有 $n$ 个城市和 $n-1$ 条双向道路连接这些城市。由于从每个城市都可以通过这些道路到达其他所有城市,这就意味着这些城市和道路构成了一棵无向树。
政府最近启动了一项城市基础设施现代化的计划。你的任务是选择一个城市子集 $S$(可以包含所有城市)进行升级,子集需要满足以下条件:
- 子集 $S$ 必须是连通的,即在 $S$ 中选择的任何两个城市之间,只有通过 $S$ 中的城市和道路可以互相到达。
- 子集 $S$ 中的「死胡同」城市数量必须正好为 $k$。这里,「死胡同」城市指的是在 $S$ 中唯一存在的城市,或者是仅与 $S$ 中另一个城市相连的城市。
以下的图示例展示了一个满足条件 $k=4$ 的可能选择,蓝色顶点为选中的城市,编号为 $1$、$4$、$6$ 和 $7$ 的城市为死胡同。
帮助 Treeland 升级城市的基础设施。你需要找出一个满足条件的城市子集 $S$,或者确定这样的子集不存在。
输入格式
输入的第一行是一个整数 $t$ ($1 \le t \le 10^4$),表示有多少个测试用例。对于每一个测试用例:
- 首行包含两个整数 $n$ 和 $k$ ($2 \le n \le 3 \cdot 10^5$, $1 \le k \le n$),分别表示城市的数量和需要在子集 $S$ 中成为「死胡同」的城市数量。
- 接下来的 $n-1$ 行分别提供了一条道路的信息。每行包含两个整数 $x$ 和 $y$ ($1 \le x, y \le n$; $x \ne y$),表示城市 $x$ 和城市 $y$ 之间有一条道路。确保从每个城市出发,都能到达其他任何一个城市。
所有测试用例中,所有 $n$ 的和不超过 $3 \cdot 10^5$。
输出格式
对每个测试用例,若存在符合条件的子集则输出 `Yes`,否则输出 `No` (不区分大小写)。如果存在这样的子集 $S$,则在同一行输出整数 $m$,表示子集中城市的数量。接下来输出 $m$ 个从 $1$ 到 $n$ 的整数,表示子集中城市的编号。这些编号可以按任意顺序给出。若有多个解,只需输出任意一个即可。
**本翻译由 AI 自动生成**