#P9662. 食物链

    ID: 6274 传统题 1500ms 256MiB 尝试: 1 已通过: 1 难度: 10 上传者: 标签>组合数学容斥原理图论拓扑排序动态规划

食物链

题目描述

小 A 在研究生态系统的稳定性。

他认为一个生态系统可以被抽象成一张有向无环图 G=(V,E)G=(V,E)VV 中每个节点代表一种生物,EE 中的每一条有向边 uvu\to v 表示 u,vu,v 之间存在捕食与被捕食的关系:uuvv 捕食。

小 A 定义一条食物链为:从一个入度为 00 的节点 p0p_0 到 一个出度为 00 的节点 pwp_w。此外,两种生物之间的食物链可能有多条。

为了测试生态系统的稳定性,小 A 会多次删去若干个节点以模拟特定生物灭绝的情况。他认为生态系统中剩余的食物链越多,则其越稳定。

但由于整个生态系统太复杂了,就算一些生物灭绝后,剩余的食物链数量仍然是巨大的。他想请你帮他求出每次删去一些特定节点后剩余的食物链条数,对 109+710^9 + 7 取模。注意这个过程会产生新的入度或出度为 00 的节点,但这些新产生的食物链不计入在内。

形式化地,给出一张点数为 nn,边数为 mm 的 DAG。定义路径集合 SS 为所有合法路径 P:p0p1pw1pwP:p_0\to p_1\to \ldots\to p_{w-1}\to p_w 所形成的集合。合法路径可以是一个点,但需要满足 p0p_0 的入度为 00pwp_w 的出度为 00qq 次询问给出 kkkk 个互不相同的数 cic_i,请你求出删去所有 cic_i 后,整个 DAG 剩余的合法路径条数,新增的合法路径不计入答案。即求出 $|\{P|P\in S,\forall p_j\in P,p_j\not\in\{c_i\}\}|\bmod 10^9+7$。

询问之间相互独立。

输入格式

第一行两个整数 n,mn, m,分别表示点的个数和边的条数。

接下来 mm 行,每行两个整数 u,v(uv)u,v(u\not= v),表示 uvu\to v 之间有一条有向边。

m+2m + 2 行一个整数 qq,表示询问个数。

接下来 qq 行,每行先是一个整数 kk,表示去掉的点的个数;然后 kk 个整数 cic_i,表示去掉的点的编号。

输出格式

qq 行,每行表示该次询问的答案对 109+710^9+7 取模后的值。

样例

7 14
3 2
4 5
2 5
2 6
3 1
3 5
3 7
3 6
6 4
1 4
6 5
1 6
7 2
7 4
7
3 2 4 6
2 4 6
2 2 5
2 1 4
0
1 4
1 6
1
3
0
6
13
7
5

DAG 如图:

询问 11:如果去掉 2,4,62, 4, 6,则剩余 11 条链:353 \to 5

询问 22:如果去掉 4,64, 6,则剩余 33 条链:353 \to 53253 \to 2 \to 537253 \to 7 \to 2 \to 5

询问 77:如果去掉 66,则剩余 55 条链:353 \to 53253 \to 2 \to 537253 \to 7 \to 2 \to 531453 \to 1 \to 4 \to 537453 \to 7 \to 4 \to 5

233 1
1 2
6
0
1 10
2 10 40
1 1
1 2
2 1 2
232
231
230
231
231
231
见附加文件中的 foodchain3.in
见附加文件中的 foodchain3.ans

该样例满足 Subtask 3 的限制。

见附加文件中的 foodchain4.in
见附加文件中的 foodchain4.ans

该样例满足 Subtask 4 的限制。

见附加文件中的 foodchain5.in
见附加文件中的 foodchain5.ans

该样例满足 Subtask 5 的限制。

数据范围

对于 100%100\% 的数据,2n2×1032\le n\le 2\times 10^3,$1\le m\le \min(\frac{n\times(n-1)}{2},2\times 10^4)$,1q5×1051\le q\le 5\times 10^5

所有询问满足 1k2×1061\le \sum k\le 2\times 10^61kmin(n,15)1\le k\le \min(n,15)1cin1\le c_i\le n,保证 cic_i 互不相同。

Subtask 编号 分值 特殊限制
11 11
给定的图是一条链
22 1414 n,q10n,q\le 10
33 2020 q103q\le 10^3
44 k=1k=1
55 k=2k=2
66 2525 无特殊限制

请注意 IO 优化。