#P16175. [ICPC 2014 NAIPC] Cheats
[ICPC 2014 NAIPC] Cheats
题目描述
Cosmo 正在玩一款鲜为人知的《塞尔达传说》系列最新作《天剑·黄昏时空之影》。在这款游戏中,玩家需要作为年轻的冒险者林克完成全部 个目标。然而,某些目标必须在其他目标之前完成!每个目标 ()都有一个前置目标 ,必须在 之前完成。当然,第一个目标(总是编号 1)没有前置目标。依赖关系不会形成循环,即不存在间接依赖于自身的目标。
然而,与所有游戏一样,这款游戏中也有隐藏的作弊码。对于每个目标 ,都有一个作弊码,允许它在其前置目标之前完成!但是,事情不能太出格。如果目标 的作弊码被使用,那么目标 不需要在其前置目标 之后完成,而只需在其前置目标的前置目标 之后完成即可(如果 ,则它可以在任何时刻完成,因为目标 1 没有前置目标)。此外,多个作弊码靠得太近可能会导致不可预测的效果,因此每个目标最多只能涉及一次作弊码的使用。换句话说,如果你对目标 使用作弊码,使其可以在其前置目标 之前完成,那么你就不能对 使用作弊码,也不能对任何以 为前置目标的其他目标使用作弊码。
Cosmo 希望在至多使用 次作弊码的情况下完成游戏。在满足这些约束的条件下,他有多少种不同的完成所有 个目标的顺序?由于这个值可能非常大,请输出它对 取模的结果。
输入格式
输入中有多个测试用例。每个测试用例的第一行包含两个整数 ()和 (),表示 Cosmo 必须完成的目标数量()和他愿意使用的最大作弊次数()。下一行包含 个空格分隔的整数 (),表示目标 2, 3, ..., 的前置目标(跳过目标 1,因为它没有前置目标)。输入以一行两个 0 结束。测试数据大小约 13 KB。
输出格式
对于每个测试用例,输出一个整数,表示 Cosmo 在使用不超过 次作弊码的情况下,能够完成所有 个目标的方案数。输出该数字对 取模的结果。不要输出任何空格,也不要在答案之间打印空行。
5 1
1 1 5 1
0 0
38
提示
下表列出了在样例输入/输出中,Cosmo 使用至多一次作弊码完成所有目标的所有顺序。
:::align{center}
:::
翻译由 DeepSeek V3.2 完成