#THU20161D. 矩阵树

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

矩阵树

时间限制: 1.0 秒

空间限制: 512 MB

题目描述

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

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

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

L 君的提示:

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

G 君的提示:

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

对于 i≠ji \neq j,ai,ja_{i,j} 为 ii 到 jj 的边数的相反数。

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

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

R 君的提示:

如果你需要计算

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

其中 pp 是质数,bb 是 aa 的约数,bb 与 pp 互质。

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

然后可以证明

(a/b) mod p=(a mod p)⋅c mod p(a/b) \bmod p=(a \bmod p) \cdot c \bmod p

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

输入格式

从标准输入读入数据。

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

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

其中如果第 ii 行第 jj 个数是 11,表示 ii 到 jj 存在一条有向边,如果是 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\% 的数据 n≤3n \le 3;

对于 20%20\% 的数据 n≤4n \le 4;

对于 40%40\% 的数据 n≤10n \le 10;

对于 60%60\% 的数据 n≤16n \le 16;

对于 100%100\% 的数据 n≤100n \le 100。