QOJ.ac

QOJ

حد الوقت: 30.0 s حد الذاكرة: 256 MB مجموع النقاط: 100

#17375. 堆计数

الإحصائيات

给定一棵拥有 $n$ 个节点的有根树。我们要用数字 $1, 2, \dots, n$ 给这些节点打上标记,使得每个标记都是唯一的,且满足堆性质,即任意节点的标记都小于其父节点的标记。问有多少种这样的标记方案?由于这个数量可能非常大,请仅计算其模 $m$ 的余数。

输入格式

输入包含多组测试数据(即多棵树的描述)。第一行包含输入树的数量 $t$ ($t \le 250$)。

每棵树的描述首先包含一行,其中有两个整数:树的大小 $n$ ($1 \le n \le 500000$) 和一个整数 $m$ ($2 \le m \le 10^9$)。

接下来的 $n - 1$ 行中,第 $i$ 行包含一个整数 $p(i + 1)$,表示第 $i + 1$ 个节点的父节点编号 ($1 \le p(i + 1) \le i$)。

在每棵树中,1 号节点均为根节点,因此不会给出其父节点。

输入数据的总大小不会超过 50MB。

输出格式

对于每棵树,输出其合法标记方案数模 $m$ 的余数。

样例

输入样例 1

4
3 1000000
1
1
4 1000000
1
1
1
5 1000000
1
2
3
4
5 1000000
1
1
3
3

输出样例 1

2
6
1
8

说明

最后一个样例测试数据的 8 种可能标记方案如下:

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.