QOJ.ac

QOJ

Time Limit: 3.0 s Memory Limit: 256 MB Total points: 100

#12945. 作弊

Statistics

Cosmo 正在玩一款名为《Skyward Wind Mask of Twilight Time》的《塞尔达传说》系列最新游戏。在这款游戏中,玩家必须以年轻冒险家林克的身份完成所有 $n$ 个目标。然而,有些目标必须在其他目标之前完成!每个目标 $i$($i = 2 \dots n$)都有一个前置目标 $P_i$,必须在 $i$ 之前完成。当然,第一个目标(始终为 1)没有前置目标。不存在会导致目标间接依赖于自身的依赖循环。

然而,像所有游戏一样,这款游戏有隐藏的作弊手段。对于每个目标 $i = 2 \dots n$,都有一个作弊手段,允许在完成其前置目标之前完成该目标!但是,事情仍然不能太乱。如果使用了目标 $i$ 的作弊手段,那么目标 $i$ 就不必在它的前置目标 $P_i$ 之后完成,而只需在它前置目标的前置目标 $P_{P_i}$ 之后完成(除非 $P_i = 1$,在这种情况下,由于目标 1 没有前置目标,它可以随时完成)。此外,在彼此太近的情况下使用多个作弊手段可能会导致不可预知的后果,因此每个目标最多只能参与一次作弊。换句话说,如果你对目标 $i$ 使用了作弊手段,以便在完成其前置目标 $P_i$ 之前完成它,那么你就不能对 $P_i$ 使用作弊手段,也不能对任何以 $i$ 为前置目标的目标使用作弊手段。

Cosmo 希望在最多使用 $k$ 个作弊手段的情况下完成游戏。在满足这些约束条件下,他有多少种不同的顺序来完成所有 $n$ 个目标?由于这个数值可能非常大,请输出其对 $10^9+7$ 取模的结果。

输入格式

输入包含多组测试数据。每组测试数据的第一行包含两个整数 $n$ ($1 \le n \le 200$) 和 $k$ ($0 \le k < n$),分别表示 Cosmo 必须完成的目标数量 ($n$) 以及他愿意使用的最大作弊次数 ($k$)。下一行包含 $n-1$ 个以空格分隔的整数 $p$ ($1 \le p \le n$),表示目标 $2, 3, \dots, n$ 的前置目标(跳过 1,因为目标 1 没有前置目标)。输入以包含两个 0 的行结束。

输出格式

对于每组测试数据,输出一个整数,表示 Cosmo 在使用不超过 $k$ 个作弊手段的情况下完成所有 $n$ 个目标的方法数。将此结果对 $10^9+7$ 取模。不要输出任何空格,也不要在答案之间打印空行。

样例

输入格式 1

5 1
1 1 5 1
0 0

输出格式 1

38

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.