CF1143C Queen

题目描述

给定一棵有根树,顶点编号从 $1$ 到 $n$。树是一个无环连通图。有根树有一个特殊的顶点,称为根。 顶点 $i$ 的祖先是从根到顶点 $i$ 的路径上的所有顶点(不包括顶点 $i$ 本身)。顶点 $i$ 的父亲是距离 $i$ 最近的祖先。每个顶点都是其父亲的子节点。在给定的树中,顶点 $i$ 的父亲为 $p_i$。对于根节点,$p_i = -1$。 ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF1143C/767631fbfbd5e834691c335a1beebc4c83722771.png) 上图是 $n=8$ 的一棵树,根为顶点 $5$。顶点 $2$ 的父亲是顶点 $3$,顶点 $1$ 的父亲是顶点 $5$。顶点 $6$ 的祖先是顶点 $4$ 和 $5$,顶点 $7$ 的祖先是顶点 $8$、$3$ 和 $5$。 你注意到有些顶点不尊重其他顶点。具体来说,如果 $c_i=1$,那么顶点 $i$ 不尊重它的任何祖先;如果 $c_i=0$,则它尊重所有祖先。 你决定依次从树中删除顶点。每一步,你选择一个非根顶点,使得它不尊重它的父亲,并且它的所有子节点都不尊重它。如果有多个这样的顶点,选择编号最小的那个。当你删除顶点 $v$ 时,$v$ 的所有子节点会与 $v$ 的父亲相连。 ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF1143C/fa2af41e1e599c9e51ca9e3edafbee94d578e807.png) 上图是删除顶点 $7$ 的示例。一旦没有满足删除条件的顶点,过程就结束。请输出你删除顶点的顺序。注意,这个顺序是唯一的。

输入格式

第一行包含一个整数 $n$($1 \le n \le 10^5$),表示树的顶点数。 接下来的 $n$ 行描述树结构:第 $i$ 行包含两个整数 $p_i$ 和 $c_i$($1 \le p_i \le n$,$0 \le c_i \le 1$),其中 $p_i$ 表示顶点 $i$ 的父亲,$c_i=0$ 表示顶点 $i$ 尊重其父亲,$c_i=1$ 表示顶点 $i$ 不尊重其父亲。根节点的 $p_i=-1$,且 $c_i=0$。保证 $p_i$ 的取值构成一棵有根树。

输出格式

如果至少有一个顶点可以被删除,输出一行,包含按删除顺序排列的顶点编号。否则,输出一行 $-1$。

说明/提示

第一个样例的删除过程如下(见下图,$c_i=1$ 的顶点为黄色): - 首先删除顶点 $1$,因为它不尊重祖先,且它的所有子节点(顶点 $2$)都不尊重它,并且 $1$ 是编号最小的满足条件的顶点; - 删除后,顶点 $2$ 与顶点 $3$ 相连; - 然后删除顶点 $2$,因为它不尊重祖先,且它的所有子节点(唯一的顶点 $4$)都不尊重它; - 删除后,顶点 $4$ 与顶点 $3$ 相连; - 然后删除顶点 $4$,因为它不尊重祖先,且它没有子节点(此时满足“所有子节点都不尊重它”的 vacuous truth); - 直接删除顶点 $4$; - 没有更多顶点可以删除。 ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF1143C/ebd0eb4e79b93258618d042cf4204608334ae632.png) 第二个样例中无需删除任何顶点: - 顶点 $2$ 和 $3$ 有子节点尊重它们; - 顶点 $4$ 和 $5$ 尊重祖先。 ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF1143C/301d90419aa6803a28893c2a81f56219871e0793.png) 第三个样例中,树的变化如下: ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF1143C/7676abdd5b6383c016cad416ee32ca622873b718.png) 由 ChatGPT 4.1 翻译