现在有 n 行 n 列的方矩阵 A ,它可以写成
记 A 矩阵的行列式为 det(A) ,可以表示成
2×2 matrices
3×3 matrices
n×n matrices
其中, Sn 是集合 {1,2,…,n} 的所有置换。
sgn 表示置换 σ 的奇偶性,当 σ 的逆序对数为偶数个时,
sgn(σ)=1 ,而为奇数个时, sgn(σ)=−1 。
给定 N 个点 M 条边的有向无环图,
另外图中有 K 个入度为零的起始点 si(si<si+1)
和 K 个出度为零的终止点 ti(ti<ti+1) ,
现在要为每个起始点 si 安排一个终止点 tai ,
每个终止点 tai 要用且只能用一次,
一个方案合法,当且仅当存在 si 到 tai 的路径,且这些路径没有交集。
当排列 {an} 的逆序对数为偶数时,该方案贡献为 1 ,否则为 −1 。
问所有方案的贡献和,答案对质数 P 取模。
N≤6×102
M≤105
P≤109+7
我们先考虑一个简单点的问题。
K=2 且起始点为 a1,a2 ,终止点为 b1,b2 。
记 Wu,v 为 u 到 v 的路径数,
Fu,v,p 为路径 up,vp 第一次有交集是在点 p 的方案数。
因为可行方案只有 a1b1,a2b2 或者 a1b2,a2b1 ,
根据题目贡献的定义,可以得到答案是
化简式子,发现答案是
Wa1,b1⋅Wa2,b2−Wa1,b2⋅Wa2,b1 ,
这个形式非常的优美,和 2×2 matrices行列式的公式是相类似的。
然后我们可以试验 K=3 的情况,也可以对照 n×n matrices行列式公式,
发现答案的形式是和行列式的计算公式是一样的。
那我们利用这个结论,不难得出这道题的解决方式。
算出每对起点终点 (s,t) 间的路径数,这个用简单的拓扑排序就可以解决,
这相当于处理出 [K×K] 的矩阵,然后根据行列式的性质,我们进行高斯消元,从而算出矩阵的行列式。
时间复杂度: O(N(N+M)+K3) 。