#P6582. [Petrozavodsk Winter 2020]Topological Ordering拓扑序计数

[Petrozavodsk Winter 2020]Topological Ordering拓扑序计数

题目描述

本题中涉及到的图论定义:

  • 一个 nn 个点,点的编号为 1,2,,n1,2,\dots,n 的有向图 G=(V,E)G=(V,E)拓扑序是一个 1,2,,n1,2,\dots,n 的排列 pp,且若 EE 中存在 xyx\to y 的边,就有 ppxx 出现在 yy 之前。

今天,算法竞赛机器人小 G 学习了拓扑排序相关知识。凭着强大的机器学习本领,它很快便一并学会了如何计算一个有向无环图的拓扑序个数。接着,它开始思考一个拓展问题:给定一个有向无环图 GG 和两个 GG 中的点 u,vu,v,请你求出有多少种 GG 的拓扑序满足 uu 排在 vv 之前。

你知道稍加思考后小 G 也能秒掉这题。不巧,就在这时停电了,依靠插头进食的小 G 也因此停止工作了。所以你只好自己解决这个拓展问题了。

为了让问题更富有挑战性,设 GG 中总点数为 nn,请你对所有 n(n1)n(n-1)(u,v)(u,v) 都求出答案。

输入格式

本题有多组数据,第一行是数据组数 TT

对于每组数据:第一行两个正整数 n,mn,m,分别为 GG 的点数和边数。接下来 mm 行,每行两个正整数 x,yx,y,表示有向图里一条 xyx\to y 的边。保证没有重边且 x<yx\lt y(也就是 [1,2,,n][1,2,\dots,n] 总是一个合法拓扑序)。

保证同一个测试点中至多有 55 组数据满足 n>10n>10

输出格式

对每组数据输出一个 n×nn\times n 的矩阵,第 ii 行第 jj 列是 v=i,u=jv=i,u=j 时的答案,注意 (v,u)(v,u) 的顺序和 (i,j)(i,j) 是反的。特别地,当 i=ji=j 时请你输出 0。

样例输入输出

样例输入 1

2
3 2
1 2
1 3
4 2
1 2
3 4

样例输出 1

0 0 0
2 0 1
2 1 0
0 0 3 1
6 0 5 3
3 1 0 0
5 3 6 0

样例 1 解释

对于第一组数据,原图共有两种拓扑序 [1,2,3],[1,3,2][1,2,3],[1,3,2]。满足 1122 前面的有 22 种,所以答案矩阵的第 22 行第 11 列是 22;满足 3322 前面的有 11 种,所以答案矩阵的第 22 行第 33 列是 11

样例 2/3

见下发文件。

样例 22 满足子任务 11 的限制。

样例 33 满足子任务 1010 的限制。

数据范围

对于所有数据:1T100,1n20,0m(n2)1\le T\le 100,1\le n\le 20,0\le m\le \binom n2保证同一个测试点中至多有 55 组数据满足 n>10n>10

子任务编号$n\le$$m\le$$T\le$分数
$1$$5$$\binom n2$$20$ $10$
$2$$20$ $0$$5$
$3$$1$$5$
$4$$2$$5$
$5$$10$$10$
$6$$10$$\binom n2$ $30$$5$
$7$$12$$40$$5$
$8$$14$$50$$10$
$9$$16$$60$$5$
$10$$17$$70$$5$
$11$$18$$80$$10$
$12$$19$$90$$5$
$13$$20$$100$$20$

时间限制:2s2\texttt{s}

空间限制:512MB512\texttt{MB}