CF1779F Xorcerer's Stones

题目描述

米莎因为被指控使用引擎作弊,被永久禁止下棋。因此,他退休并决定成为一名“异或术士”。 一天,米莎在公园散步时,遇到了一棵有根树,节点编号为 $1$ 到 $n$。树的根节点是节点 $1$。 对于每个 $1\le i\le n$,节点 $i$ 中有 $a_i$ 颗石头。米莎最近在异或术课上学到了一种新咒语,想要试一试。每次施法包括: - 选择某个节点 $i$($1 \leq i \leq n$)。 - 计算所有属于 $i$ 的子树的节点 $j$ 的 $a_j$ 的按位异或和 $x$($i$ 自己也属于自己的子树)。 - 将所有属于 $i$ 的子树的节点 $j$ 的 $a_j$ 都赋值为 $x$。 米莎最多可以施展 $2n$ 次咒语,他想要把树上的所有石头都移除。更正式地说,他希望对于每个 $1\leq i \leq n$ 都有 $a_i=0$。你能帮他完成这个目标吗? 一棵有 $n$ 个节点的树是一个连通无环图,包含 $n-1$ 条边。节点 $i$ 的子树是所有满足从根节点 $1$ 到 $j$ 的简单路径上经过 $i$ 的节点 $j$ 的集合。我们认为 $i$ 也包含在自己的子树中。

输入格式

第一行包含一个整数 $n$($2 \leq n \leq 2\cdot 10^5$),表示树的大小。 第二行包含一个整数数组 $a_1,a_2,\ldots, a_n$($0 \leq a_i \leq 31$),表示每个节点初始时的石头数。 第三行包含一个整数数组 $p_2,p_3,\ldots, p_n$($1 \leq p_i \leq i-1$),其中 $p_i$ 表示存在一条连接 $p_i$ 和 $i$ 的边。

输出格式

如果不存在合法的施法序列,输出 $-1$。 否则,第一行输出一个整数 $q$($0 \leq q \leq 2n$),表示施法的次数。 第二行输出一个长度为 $q$ 的整数序列 $v_1,v_2,\ldots,v_q$($1 \leq v_i \leq n$),表示第 $i$ 次施法作用于节点 $v_i$ 的子树。请注意,顺序是有影响的。 如果有多种方案,输出任意一种即可。你不需要最小化操作次数。

说明/提示

请参考下图理解第三个测试点的解释。只展示了前 $4$ 次施法,因为最后 $2$ 次没有效果。第一张图表示初始树,每个节点上方绿色数字为石头数。当前施法导致的变化用红色高亮。 ![](https://cdn.luogu.com.cn/upload/vjudge_pic/CF1779F/87049d0f1cff376d7b36c99b33f175c4877519fa.png) 由 ChatGPT 4.1 翻译