QOJ.ac

QOJ

时间限制: 7 s 内存限制: 256 MB 总分: 100 可 Hack ✓

#12872. PQ 树

统计

PQ 树是一种表示排列族的树状数据结构。该结构常用于解决各种计算问题,例如图的平面性测试或区间图识别。

$n$ 个元素的 PQ 树是一棵有根树,其顶点分为三种类型:P-顶点、Q-顶点或叶子。任何 P-顶点至少有两个子节点(其子节点初始时是无序的),任何 Q-顶点至少有三个子节点(其子节点初始时是有序的),任何叶子没有子节点。树中恰好有 $n$ 个叶子,它们与 $\{1, \dots, n\}$ 中的不同整数一一对应。

如果可以通过以下方式排列所有内部(P 和 Q)顶点的子节点,则称给定的 PQ 树表示数字 $\{1, \dots, n\}$ 的一个排列 $\sigma$:

  • P-顶点的子节点可以任意排列;
  • Q-顶点的子节点顺序可以保持不变或反转;
  • 当从根节点开始按照所选的子节点顺序遍历树时,叶子被访问的顺序即为排列 $\sigma$。

例如,考虑以下 PQ 树:

显然,该树表示排列 $(1, 2, 3, 4)$ 和 $(4, 3, 2, 1)$,但不表示排列 $(2, 1, 4, 3)$(因为在任何排列中,数字 2 和 3 必须相邻)以及 $(1, 4, 3, 2)$(因为 4 必须位于开头或结尾)。

如果由第一棵树表示的每一个排列也由第二棵树表示,反之亦然,则我们认为这两棵 PQ 树相同;否则,这两棵树是不同的(注意,这意味着反转 Q-顶点的子节点顺序不会改变 PQ 树)。

给定 $k$ 个数字 $\{1, \dots, n\}$ 的排列。计算表示所有给定排列的 $n$ 个叶子的不同 PQ 树的数量。输出答案对 $10^9 + 7$ 取模的结果。

输入格式

第一行包含两个整数 $k$ 和 $n$ ($1 \le k, n \le 500$)。 接下来的 $k$ 行,每行包含 $n$ 个空格分隔的整数:给定的排列。在每一行中,数字两两不同且属于集合 $\{1, \dots, n\}$。

输出格式

输出答案对 $10^9 + 7$ 取模的结果。

样例

样例输入 1

1 2
1 2

样例输出 1

1

样例输入 2

2 4
1 2 3 4
1 2 4 3

样例输出 2

7

样例输入 3

1 5
1 2 3 4 5

样例输出 3

82

说明

两个元素构成的唯一树是带有两个叶子子节点的 P-根树(注意 Q-顶点必须至少有三个子节点)。

满足第二个样例的七棵树如下图所示:

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.