P16459 [UOI 2026] Tree Subsets

题目描述

给定一棵有 $n$ 个顶点的有根树,树根为顶点 $1$。 每个顶点 $i$ 有一个值 $a_i$,该值要么为 $0$,要么为 $1$。 对于每种大小 $k$($1 \le k \le n$),请确定:通过选取满足下列条件的顶点集合 $S$,能够获得哪些异或值: - $|S| = k$; - 若顶点 $v$ 属于集合 $S$,则顶点 $v$ 的子树中的所有顶点也一定属于 $S$。 集合 $S$ 的**值**定义为该集合中所有顶点的值的异或: $\bigoplus_{v \in S} a_v.$ 顶点 $v$ 的子树是指所有满足如下条件的顶点 $u$ 构成的集合:从根 $1$ 到顶点 $u$ 的简单路径经过顶点 $v$。 比特的异或运算定义如下: $0 \oplus 0 = 0$, $0 \oplus 1 = 1$, $1 \oplus 0 = 1$, $1 \oplus 1 = 0$。 顶点 $v$ 的子顶点是指其父顶点为 $v$ 的顶点。

输入格式

第一行包含一个整数 $t$($1 \le t \le 1000$)—— 测试数据的组数。 每组测试数据由三行组成。 每组数据的第一行包含一个整数 $n$($2 \le n \le 4 \cdot 10^5$)—— 树中顶点的个数。 第二行包含 $n$ 个整数 $a_1, a_2, \ldots, a_n$($a_i \in \{0, 1\}$)—— 各个顶点的值。 第三行包含 $n-1$ 个整数 $p_2, p_3, \ldots, p_n$($1 \le p_i < i$),其中 $p_i$ 是顶点 $i$ 的父顶点。 保证所有测试数据的 $n$ 之和不超过 $4 \cdot 10^5$。

输出格式

对于每组测试数据,输出一行包含 $n$ 个整数 $ans_1, ans_2, \ldots, ans_n$。 对于每个 $k$: - $ans_k = 0$,若在所有大小为 $k$ 的合法集合中,只能得到异或值 $0$; - $ans_k = 1$,若在所有大小为 $k$ 的合法集合中,只能得到异或值 $1$; - $ans_k = 2$,若在所有大小为 $k$ 的合法集合中,既能得到异或值 $0$,也能得到异或值 $1$。

说明/提示

下面分别是第一个和第二个测试用例中的树的形态。 :::align{center} ![](https://cdn.luogu.com.cn/upload/image_hosting/2r0thxet.png) ![](https://cdn.luogu.com.cn/upload/image_hosting/sflpynnl.png) ::: 考虑第一个测试用例。 对于 $k = 1$,两种异或值都可以得到。例如,集合 $S = \{5\}$ 是合法的且异或值为 $0$。集合 $S = \{3\}$ 也是合法的且异或值为 $1$。因此 $ans_1 = 2$。 对于 $k = 3$,两种异或值也都可以得到。例如,集合 $S = \{2, 3, 5\}$ 是合法的,因为顶点 $2$ 与其子树中的所有顶点一同被选中。它的异或值为 $a_2 \oplus a_3 \oplus a_5 = 0 \oplus 1 \oplus 0 = 1$。而集合 $S = \{3, 4, 5\}$ 也是合法的,因为顶点 $4$ 与其子树中的所有顶点一同被选中。它的异或值为 $a_3 \oplus a_4 \oplus a_5 = 1 \oplus 1 \oplus 0 = 0$。因此 $ans_3 = 2$。 所以,第一个测试用例的答案为 $2\ 1\ 2\ 0\ 1$。 考虑第二个测试用例。 在此测试用例中,仅当 $k = 6$ 时两种异或值都能得到。 例如,集合 $S = \{3, 4, 6, 7, 8, 9\}$ 是合法的。它的异或值为 $a_3 \oplus a_4 \oplus a_6 \oplus a_7 \oplus a_8 \oplus a_9 = 0 \oplus 1 \oplus 1 \oplus 1 \oplus 1 \oplus 1 = 1$。 而集合 $S = \{4, 5, 6, 7, 8, 9\}$ 也是合法的。它的异或值为 $a_4 \oplus a_5 \oplus a_6 \oplus a_7 \oplus a_8 \oplus a_9 = 1 \oplus 1 \oplus 1 \oplus 1 \oplus 1 \oplus 1 = 0$。因此 $ans_6 = 2$。 所以,第二个测试用例的答案为 $1\ 0\ 1\ 0\ 1\ 2\ 0\ 0\ 0$。 ### 计分 叶子是指没有子顶点的顶点。 竹子是指每个顶点至多有一个子顶点的树。 - ($2$ 分):$\sum n \le 20$; - ($3$ 分):$p_i=1$; - ($5$ 分):$\sum n^3 \le 10^8$; - ($8$ 分):$\sum n^2 \le 10^8$; - ($12$ 分):所有测试用例中叶子总数不超过 $100$; - ($8$ 分):去掉顶点 $1$ 后,每个连通分量均为竹子,且这样的连通分量至多有两个; - ($9$ 分):去掉顶点 $1$ 后,每个连通分量均为竹子; - ($9$ 分):所有树都是满二叉树,即存在整数 $q$ 使得 $n = 2^q - 1$,且对每个顶点 $i > 1$ 有 $p_i = \left\lfloor \frac{i}{2} \right\rfloor$; - ($22$ 分):每个测试用例满足 $n \le 2 \cdot 10^5$; - ($22$ 分):无额外限制。 翻译由 DeepSeek V4 Pro 完成