#P15369. [UOI2026] Tree Subsets

    ID: 14584 传统题 1000ms 256MiB 尝试: 0 已通过: 0 难度: 10 上传者: 标签>CF3000树形DP多项式FFT动态规划背包DP

[UOI2026] Tree Subsets

当前没有测试数据。

2s 512M

题目描述

给定一棵有 nn 个顶点的有根树,树根为顶点 11

每个顶点 ii 有一个值 aia_i,该值要么为 00,要么为 11

对于每种大小 kk1kn1 \le k \le n),请确定:通过选取满足下列条件的顶点集合 SS,能够获得哪些异或值:

  • S=k|S| = k
  • 若顶点 vv 属于集合 SS,则顶点 vv 的子树中的所有顶点也一定属于 SS

集合 SS定义为该集合中所有顶点的值的异或: vSav.\bigoplus_{v \in S} a_v.

顶点 vv 的子树是指所有满足如下条件的顶点 uu 构成的集合:从根 11 到顶点 uu 的简单路径经过顶点 vv

比特的异或运算定义如下: 00=00 \oplus 0 = 001=10 \oplus 1 = 110=11 \oplus 0 = 111=01 \oplus 1 = 0

顶点 vv 的子顶点是指其父顶点为 vv 的顶点。

输入格式

第一行包含一个整数 tt1t10001 \le t \le 1000)—— 测试数据的组数。

每组测试数据由三行组成。

每组数据的第一行包含一个整数 nn2n41052 \le n \le 4 \cdot 10^5)—— 树中顶点的个数。

第二行包含 nn 个整数 a1,a2,,ana_1, a_2, \ldots, a_nai{0,1}a_i \in \{0, 1\})—— 各个顶点的值。

第三行包含 n1n-1 个整数 p2,p3,,pnp_2, p_3, \ldots, p_n1pi<i1 \le p_i < i),其中 pip_i 是顶点 ii 的父顶点。

保证所有测试数据的 nn 之和不超过 41054 \cdot 10^5

输出格式

对于每组测试数据,输出一行包含 nn 个整数 ans1,ans2,,ansnans_1, ans_2, \ldots, ans_n

对于每个 kk

  • ansk=0ans_k = 0,若在所有大小为 kk 的合法集合中,只能得到异或值 00
  • ansk=1ans_k = 1,若在所有大小为 kk 的合法集合中,只能得到异或值 11
  • ansk=2ans_k = 2,若在所有大小为 kk 的合法集合中,既能得到异或值 00,也能得到异或值 11

输入输出样例 #1

输入 #1

2
5
1 0 1 1 0
1 2 1 4
9
0 0 0 1 1 1 1 1 1
1 2 3 2 4 4 6 8

输出 #1

2 1 2 0 1 
1 0 1 0 1 2 0 0 0 

说明/提示

下面分别是第一个和第二个测试用例中的树的形态。

:::align{center} :::

考虑第一个测试用例。

对于 k=1k = 1,两种异或值都可以得到。例如,集合 S={5}S = \{5\} 是合法的且异或值为 00。集合 S={3}S = \{3\} 也是合法的且异或值为 11。因此 ans1=2ans_1 = 2

对于 k=3k = 3,两种异或值也都可以得到。例如,集合 S={2,3,5}S = \{2, 3, 5\} 是合法的,因为顶点 22 与其子树中的所有顶点一同被选中。它的异或值为 $a_2 \oplus a_3 \oplus a_5 = 0 \oplus 1 \oplus 0 = 1$。而集合 S={3,4,5}S = \{3, 4, 5\} 也是合法的,因为顶点 44 与其子树中的所有顶点一同被选中。它的异或值为 $a_3 \oplus a_4 \oplus a_5 = 1 \oplus 1 \oplus 0 = 0$。因此 ans3=2ans_3 = 2

所以,第一个测试用例的答案为 2 1 2 0 12\ 1\ 2\ 0\ 1

考虑第二个测试用例。

在此测试用例中,仅当 k=6k = 6 时两种异或值都能得到。

例如,集合 S={3,4,6,7,8,9}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}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$。因此 ans6=2ans_6 = 2

所以,第二个测试用例的答案为 1 0 1 0 1 2 0 0 01\ 0\ 1\ 0\ 1\ 2\ 0\ 0\ 0

计分

叶子是指没有子顶点的顶点。

竹子是指每个顶点至多有一个子顶点的树。

  • 22 分):n20\sum n \le 20
  • 33 分):pi=1p_i=1
  • 55 分):n3108\sum n^3 \le 10^8
  • 88 分):n2108\sum n^2 \le 10^8
  • 1212 分):所有测试用例中叶子总数不超过 100100
  • 88 分):去掉顶点 11 后,每个连通分量均为竹子,且这样的连通分量至多有两个;
  • 99 分):去掉顶点 11 后,每个连通分量均为竹子;
  • 99 分):所有树都是满二叉树,即存在整数 qq 使得 n=2q1n = 2^q - 1,且对每个顶点 i>1i > 1pi=i2p_i = \left\lfloor \frac{i}{2} \right\rfloor
  • 2222 分):每个测试用例满足 n2105n \le 2 \cdot 10^5
  • 2222 分):无额外限制。

翻译由 DeepSeek V4 Pro 完成