#THU20161D. 矩阵树

    ID: 222 Type: Default 1000ms 512MiB Tried: 1 Accepted: 1 Difficulty: 4 Uploaded By: Tags>清华推研机试校内推免树结构生成树线性代数高斯消元

矩阵树

时间限制: 1.0 秒

空间限制: 512 MB

题目描述

B 君有一个 nn 个点的有向图。

B 君想知道有多少种不同的以 11 号点为根的生成树形图(在离散数学这门课程中,这个数据结构被叫做“根树”)。

由于答案可能很大,只需输出这个数除以 1000710007 所得的余数。

L 君的提示

11 号点为根的树形图,就是说,从有向图中选出 n1n−1 条边,构成一个树,这个树的根节点是 11,对于所有其他点 ii,存在且只存在一条从 ii11 的有向路径。

G 君的提示

对于一个有向图,我们构造如下 AA 矩阵(其中 ai,ja_{i,j} 表示矩阵第 ii 行第 jj 列的元素):

对于 iji \neq jai,ja_{i,j}iijj 的边数的相反数。

ai,ia_{i,i}ii 的出度。

那么这个矩阵删去第 11 行第 11 列之后的余子式为以 11 号点为根的树形图的数量。

R 君的提示

如果你需要计算

(a/b)modp(a/b) \bmod p

其中 pp 是质数,bbaa 的约数,bbpp 互质。

你可以先找到 cc,满足 bcmodp=1bc \bmod p = 1

然后可以证明

(a/b)modp=(amodp)cmodp(a/b) \bmod p=(a \bmod p) \cdot c \bmod p

其中满足 bcmodp=1b\cdot c \bmod p = 1cc,被称为 bb 的乘法逆元,满足这个条件的 cc 存在且唯一。

输入格式

从标准输入读入数据。

输入第一行一个正整数 nn,表示一共有 nn 个点。

以下 nn 行,每行 nn 个数,表示这个有向图的邻接矩阵。

其中如果第 ii 行第 jj 个数是 11,表示 iijj 存在一条有向边,如果是 00,表示不存在有向边。

在本题中没有重边和自环,所以这个矩阵是 0101 矩阵,主对角线上的数均为 00

输出格式

输出到标准输出。

一行一个整数,表示答案。

4
0 0 0 0
1 0 1 0
1 1 0 1
1 1 1 0
12

样例 1 解释

矩阵 AA

$$\begin{bmatrix} 0 & 0 & 0 & 0 \\ -1 & 2 & -1 & 0 \\ -1 & -1 & 3 & -1 \\ -1 & -1 & -1 & 3 \end{bmatrix} $$

删掉第一行第一列之后的,做行列式求值(也就是余子式)为

$$\left| \begin{matrix} 2 & -1 & 0 \\ -1 & 3 & -1 \\ -1 & -1 & 3 \end{matrix} \right| = 12 $$

子任务

对于 10%10\% 的数据 n3n \le 3

对于 20%20\% 的数据 n4n \le 4

对于 40%40\% 的数据 n10n \le 10

对于 60%60\% 的数据 n16n \le 16

对于 100%100\% 的数据 n100n \le 100