#P16135. [ICPC 2018 NAIPC] Red Black Tree

[ICPC 2018 NAIPC] Red Black Tree

题目描述

给定一棵有根树,包含 nn 个节点,节点编号为 1n1 \dots n。根节点为 1。其中 mm 个节点被染成红色,其余节点为黑色。

你需要选择一个节点子集,使得子集中不存在某个节点是另一个节点的祖先。例如,如果 A 是 B 的父节点,B 是 C 的父节点,那么 A、B、C 中最多只能有一个被选入子集。此外,你希望所选子集中恰好包含 kk 个红色节点。

已知恰好有 mm 个红色节点,请对于 k=0mk = 0 \dots m 的每个取值,计算出满足上述条件且恰好包含 kk 个红色节点的子集数量。

输入格式

每个输入包含单个测试用例。请注意,你的程序可能会在不同输入上多次运行。每个测试用例的第一行包含两个整数 nn1n2×1051 \leq n \leq 2 \times 10^5)和 mm0mmin(103,n)0 \leq m \leq \min(10^3, n)),其中 nn 是树中的节点数,mm 是红色节点的数量。节点编号为 1n1 \ldots n

接下来的 n1n - 1 行,每行包含一个整数 pp1pn1 \leq p \leq n),表示该节点的父节点编号。节点按顺序给出,从节点 2 开始,然后是节点 3,依此类推。节点 1 是根节点,因此被跳过。保证这些节点构成一棵以节点 1 为根的无环树。

接下来的 mm 行,每行包含一个整数 rr1rn1 \leq r \leq n)。这些是红色节点的编号。所有 rr 的值互不相同。

输出格式

输出 m+1m + 1 行,分别对应 k=0mk = 0 \dots m 时满足条件的子集数量。按顺序输出这些数字,并对 109+710^9 + 7 取模。

4 1
1
1
1
3
5
4
4 4
1
1
1
1
2
3
4
1
4
3
1
0
14 4
1
2
1
2
3
4
5
5
13
8
10
4
4
8
3
12
13
100
169
90
16
0

提示

翻译由 DeepSeek V3.2 完成