#P15369. [UOI2026] Tree Subsets
[UOI2026] Tree Subsets
当前没有测试数据。
2s 512M
题目描述
给定一棵有 个顶点的有根树,树根为顶点 。
每个顶点 有一个值 ,该值要么为 ,要么为 。
对于每种大小 (),请确定:通过选取满足下列条件的顶点集合 ,能够获得哪些异或值:
- ;
- 若顶点 属于集合 ,则顶点 的子树中的所有顶点也一定属于 。
集合 的值定义为该集合中所有顶点的值的异或:
顶点 的子树是指所有满足如下条件的顶点 构成的集合:从根 到顶点 的简单路径经过顶点 。
比特的异或运算定义如下: , , , 。
顶点 的子顶点是指其父顶点为 的顶点。
输入格式
第一行包含一个整数 ()—— 测试数据的组数。
每组测试数据由三行组成。
每组数据的第一行包含一个整数 ()—— 树中顶点的个数。
第二行包含 个整数 ()—— 各个顶点的值。
第三行包含 个整数 (),其中 是顶点 的父顶点。
保证所有测试数据的 之和不超过 。
输出格式
对于每组测试数据,输出一行包含 个整数 。
对于每个 :
- ,若在所有大小为 的合法集合中,只能得到异或值 ;
- ,若在所有大小为 的合法集合中,只能得到异或值 ;
- ,若在所有大小为 的合法集合中,既能得到异或值 ,也能得到异或值 。
输入输出样例 #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}
:::
考虑第一个测试用例。
对于 ,两种异或值都可以得到。例如,集合 是合法的且异或值为 。集合 也是合法的且异或值为 。因此 。
对于 ,两种异或值也都可以得到。例如,集合 是合法的,因为顶点 与其子树中的所有顶点一同被选中。它的异或值为 $a_2 \oplus a_3 \oplus a_5 = 0 \oplus 1 \oplus 0 = 1$。而集合 也是合法的,因为顶点 与其子树中的所有顶点一同被选中。它的异或值为 $a_3 \oplus a_4 \oplus a_5 = 1 \oplus 1 \oplus 0 = 0$。因此 。
所以,第一个测试用例的答案为 。
考虑第二个测试用例。
在此测试用例中,仅当 时两种异或值都能得到。
例如,集合 是合法的。它的异或值为 $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$。
而集合 也是合法的。它的异或值为 $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$。因此 。
所以,第二个测试用例的答案为 。
计分
叶子是指没有子顶点的顶点。
竹子是指每个顶点至多有一个子顶点的树。
- ( 分):;
- ( 分):;
- ( 分):;
- ( 分):;
- ( 分):所有测试用例中叶子总数不超过 ;
- ( 分):去掉顶点 后,每个连通分量均为竹子,且这样的连通分量至多有两个;
- ( 分):去掉顶点 后,每个连通分量均为竹子;
- ( 分):所有树都是满二叉树,即存在整数 使得 ,且对每个顶点 有 ;
- ( 分):每个测试用例满足 ;
- ( 分):无额外限制。
翻译由 DeepSeek V4 Pro 完成