题库练习 古老典籍(ancient)
← 上一题 下一题 →

A7349 | 古老典籍(ancient)

时间限制3s
内存限制1024MB
通过 / 提交0/0

题目描述

在浩瀚的星空之下,有一座古老的智慧神殿,殿中藏有一棵名为“真理之树”的圣物。这棵树共有 $n$ 个节点,编号为 $1 \sim n$,其中节点 $1$ 为根,每个节点都记载着一卷古老的典籍。

传说中,只有按照某种特定的从根节点 $1$ 开始的深度优先搜索(DFS)顺序阅读学习这些典籍,才能领悟其中的终极智慧。然而,守护神殿的贤者们留下了一条禁忌规则:对于给定的 $q$ 对典籍 $(a,b)$,在阅读顺序中,**节点 $a$ 的典籍必须出现在节点 $b$ 典籍之前。**

现在,你作为新一代的贤者继承者,需要计算:在遵守所有禁忌规则的前提下,一共有多少种不同的阅读顺序?

由于答案可能非常巨大,你需要输出它对 $10^9+7$ 取模的结果。

输入格式

输入的第一行 $t$,表示测试数据的组数。

对于每组测试数据内:

输入的第一行包含三个正整数 $n,q$,分别表示树的节点数,以及规则的数量。

接下来 $n$ 行,其中第 $i$ 行的第一个数字 $c_i$ 表示节点 $i$ 的儿子数量,接下来 $c_i$ 个数字,分别为节点 $i$ 的儿子编号。

接下来 $q$ 行,每行两个整数 $a,b$。表示典籍 $a$ 的阅读顺序必须出现在典籍 $b$ 之前。

输出格式

输出 $t$ 行,每行一个数字,表示符合规则的阅读顺序方案数,对 $10^9+7$ 取模。

输入输出样例

输入 #1
2
6 1
3 2 3 4
2 5 6
0
0
0
0
2 3
6 2
3 2 3 4
2 5 6
0
0
0
0
2 3
3 5
输出 #1
6
0
C++ 编辑器
输入
输出