AT_arc143_e [ARC143E] Reversi
题目描述
有一棵包含 $N$ 个顶点的树。每个顶点编号为 $1$ 到 $N$,第 $i$ 条边连接顶点 $A_i$ 和顶点 $B_i$。此外,每个顶点上都放置有一个“黑白棋”的棋子。每个顶点上的棋子的状态由字符串 $S$ 给出,$S$ 的第 $i$ 个字符为 `B` 时,表示顶点 $i$ 上的棋子正面为黑色;为 `W` 时,表示正面为白色。
请判断是否可以通过以下操作恰好 $N$ 次,将所有顶点上的棋子全部移除。如果可以,请在所有可能的选择顶点顺序 $P_1,P_2,\ldots,P_N$ 中,输出字典序最小的一个。
- 每次操作可以选择一个正面为白色的棋子所在的顶点,将该顶点上的棋子移除。然后,将与该顶点相邻的所有顶点上的棋子翻面。
关于“黑白棋”的棋子:棋子一面为黑色,一面为白色,翻面后正反面颜色互换。
关于数列的字典序:给定两个不同的数列 $S$ 和 $T$,判断大小的算法如下:
记 $S$ 的第 $i$ 个元素为 $S_i$。若 $S$ 字典序小于 $T$,记作 $S < T$,大于则记作 $S > T$。
1. 取 $S$ 和 $T$ 中较短的长度为 $L$,依次比较 $i=1,2,\dots,L$ 时 $S_i$ 与 $T_i$ 是否相等。
2. 若存在 $S_i \neq T_i$,取最小的此类 $i$ 为 $j$,比较 $S_j$ 与 $T_j$,若 $S_j < T_j$,则 $S < T$,否则 $S > T$,算法结束。
3. 若所有 $i$ 都有 $S_i = T_i$,则比较长度,短的字典序更小。
输入格式
输入以如下格式从标准输入读入:
> $N$
> $A_1$ $B_1$
> $\vdots$
> $A_{N-1}$ $B_{N-1}$
> $S$
输出格式
若目标无法达成,输出 `-1`。若可以达成,输出一行:
> $P_1$ $P_2$ $\cdots$ $P_N$
说明/提示
### 数据范围
- $1 \leq N \leq 2 \times 10^5$
- $1 \leq A_i, B_i \leq N$
- 给定的图为一棵树。
- $S$ 是仅由 `B` 和 `W` 组成的长度为 $N$ 的字符串。
### 样例解释 2
在这种情况下,无法进行任何一次操作。
由 ChatGPT 4.1 翻译