CF963B Destruction of a Tree

题目描述

给定一棵树(一个有 $n$ 个顶点和 $n-1$ 条边的图,且任意两个顶点之间都可以通过这些边连通)。 如果某个顶点的度数为偶数,则该顶点可以被销毁。若销毁一个顶点,则与该顶点相连的所有边也会被删除。 请销毁给定树中的所有顶点,或者判断是否无法做到。

输入格式

第一行包含一个整数 $n$($1 \leq n \leq 2 \cdot 10^{5}$),表示树的顶点数。 第二行包含 $n$ 个整数 $p_{1}, p_{2}, \ldots, p_{n}$($0 \leq p_{i} \leq n$)。如果 $p_{i} \neq 0$,则表示存在一条边连接顶点 $i$ 和顶点 $p_{i}$。保证给定的图是一棵树。

输出格式

如果可以销毁所有顶点,输出 "YES"(不带引号),否则输出 "NO"(不带引号)。 如果可以销毁所有顶点,接下来 $n$ 行,每行输出一个顶点的编号,表示销毁这些顶点的顺序。如果有多种正确答案,可以输出任意一种。

说明/提示

在第一个样例中,首先需要移除编号为 1 的顶点(此时边 (1, 2) 和 (1, 4) 被移除),然后移除编号为 2 的顶点(此时边 (2, 3) 和 (2, 5) 被移除)。此后树中已无边,剩余顶点可以按任意顺序移除。 ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF963B/9b84e98fe96447b82c6a8ccba7a9e4a5189ce14b.png) 由 ChatGPT 4.1 翻译