luogu#P10053. [CCO2022] Bi-ing Lottery Treekets

[CCO2022] Bi-ing Lottery Treekets

题目描述

在一个平行宇宙里,每个人都在 CCO 上得了满分。因此,Troy 需要根据抽奖来选出获胜者。每个参赛者将选择一些数字来创建一张彩票。一张彩票是一个大小为 NN 的数组,从 11NN 编号,其中每个元素是从 00KK 的一个数字。

中奖彩票是由将 KK 个球(编号为 11KK)按随机顺序投入一个有根二叉树来确定的。这棵树有 NN 个节点(编号为 11NN),并以节点 11 为根。

每个球都有一个指定的投放节点,它将在那里投放。当一个球投放在一个空节点或进入一个空节点时,会发生以下三种情况之一:

  1. 如果当前节点的所有子节点都被球占据(或者如果一个节点没有子节点),那么当前球就会停留在当前节点。也就是说,它会留在那里,不再移动。
  2. 如果当前节点只有一个空的子节点,那么当前球将移动到这个子节点。
  3. 如果当前节点有两个空的子节点,而且如果当前球刚刚被投放,它可以向左或向右移动。否则,它将继续沿着它之前的移动方向移动。

如果 KK 个球不能全部被投放,那么就没有确定的中奖彩票。这种情况发生在一个球被投放时,它的投放节点被另一个球占据了。

如果所有 KK 个球都被投放了,那么球的停留位置就决定了中奖彩票。中奖彩票的第 ii 个元素是停留在节点 ii 的球的编号,或者如果没有球停留在节点 ii,就是 00

Troy 想知道可能的中奖彩票的数量。因为答案可能很大,你只需要求数量对 109+710^9+7 取模的结果。

输入格式

第一行包含两个用空格分隔的整数 NNKK,表示二叉树中的节点数和球的数目。

第二行包含 KK 个用空格分隔的整数,其中第 ii 个整数表示编号为 ii 的球的指定投放节点。

最后 NN 行,每行包含两个用空格分隔的整数。第 ii 行包含 LiL_{i}RiR_{i},表示第 ii 个节点的左子节点和右子节点,其中 00 表示子节点不存在。

输出格式

输出中奖彩票的数量模 109+710^{9}+7

5 2
1 3
2 3
0 0
4 5
0 0
0 0
4
4 3
1 2 4
0 2
0 3
0 4
0 0
2

提示

样例 1 解释

考虑当球 11 先被投放时。如果球 11 向左移动,那么它将停留在节点 22。之后,球 22 被投放,可以停留在节点 4455。如果球 11 向右移动,它将停留在节点 55。然后,球 22 将停留在节点 44

考虑当球 22 先被投放时。球 22 可以向左或向右移动,分别停留在节点 4455。然后如果球 11 在被投放后向左移动,它将停留在节点 22。然而,如果球 11 向右移动,它将停留在节点 4455,取决于球 22 没有占据的位置。

可能的中奖彩票是 [0,1,0,2,0],[0,1,0,0,2],[0,0,0,1,2][0,1,0,2,0],[0,1,0,0,2],[0,0,0,1,2][0,0,0,2,1][0,0,0,2,1]

样例 2 解释

这个样例满足第二个子任务的条件。

33 必须先被投放,因为如果球 11 或球 22 在球 33 之前被投放,它会停留在节点 44,这不会让球 33 被投放。

因此,我们可以先投放球 33,然后投放球 22,最后投放球 11,或者我们可以先投放球 33,然后投放球 11,最后投放球 22。对应的中奖彩票是 [0,1,2,3][0,1,2,3][0,2,1,3][0,2,1,3]

数据范围

对于所有的数据,有 1N,K40001\leq N,K \leq 4000

子任务编号 分值 NN 的范围 KK 的范围 额外的约束
11 1212 1N121 \leq N \leq 12 1K61 \leq K \leq 6
22 1616 1N40001 \leq N \leq 4000 1K40001 \leq K \leq 4000 所有节点都没有左子节点
33 3636 NN 个投放节点是不同的
44