[JZOJ4378] 八卦天盘
2016-03-10 20:20
786 查看
Determinant
Definition
现在有nn行nn列的方矩阵AA,它可以写成A=⎡⎣⎢⎢⎢⎢⎢a1,1a2,1⋮an,1a1,2a2,2⋮an,2……⋱…a1,na2,n⋮an,n⎤⎦⎥⎥⎥⎥⎥A = \begin{bmatrix} a_{1,1} & a_{1,2} & \dots & a_{1,n} \\
a_{2,1} & a_{2,2} & \dots & a_{2,n} \\
\vdots & \vdots & \ddots & \vdots \\
a_{n,1} & a_{n,2} & \dots & a_{n,n} \end{bmatrix}
记AA矩阵的行列式为det(A)\det(A),可以表示成
∣∣∣∣∣∣∣a1,1a2,1⋮an,1a1,2a2,2⋮an,2……⋱…a1,na2,n⋮an,n∣∣∣∣∣∣∣\begin{vmatrix} a_{1,1} & a_{1,2} & \dots & a_{1,n} \\
a_{2,1} & a_{2,2} & \dots & a_{2,n} \\
\vdots & \vdots & \ddots & \vdots \\
a_{n,1} & a_{n,2} & \dots & a_{n,n} \end{vmatrix}
2×22 \times 2 matrices
∣∣∣acbd∣∣∣=ad−bc\begin{vmatrix} a & b\\c & d \end{vmatrix}=ad - bc
3×33 \times 3 matrices
∣∣∣∣adgbehcfi∣∣∣∣=a∣∣∣ehfi∣∣∣−b∣∣∣dgfi∣∣∣+c∣∣∣dgeh∣∣∣=a(ei−fh)−b(di−fg)+c(dh−eg)=aei+bfg+cdh−ceg−bdi−afh.\begin{align*}
\begin{vmatrix}
a&b&c\\d&e&f\\g&h&i
\end{vmatrix}
& =
a\begin{vmatrix}e&f\\h&i\end{vmatrix}
-b\begin{vmatrix}d&f\\g&i\end{vmatrix}
+c\begin{vmatrix}d&e\\g&h\end{vmatrix} \\
& = a(ei-fh)-b(di-fg)+c(dh-eg) \\
& = aei+bfg+cdh-ceg-bdi-afh.
\end{align*}
n×nn \times n matrices
det(A)=∑σ∈Snsgn(σ)∏i=1nai,σi\det(A) = \sum_{\sigma \in S_n} \mathrm{sgn} (\sigma) \prod_{i=1}^n a_{i,\sigma_i}
其中,SnS_n是集合{1,2,…,n}\{1,2,\dots,n\}的所有置换。
sgn\mathrm{sgn}表示置换σ\sigma的奇偶性,当σ\sigma的逆序对数为偶数个时,
sgn(σ)=1\mathrm{sgn}(\sigma)=1,而为奇数个时,sgn(σ)=−1\mathrm{sgn}(\sigma)=-1。
Properties of the determinant
交换矩阵不同两行,行列式值取相反数。将某行的任意倍加到另一行,行列式值不变。
如果矩阵是上三角矩阵,行列式值等于对角线元素的积。
Problem
Description
给定NN个点MM条边的有向无环图,另外图中有KK个入度为零的起始点si(si<si+1)s_i(s_i
和KK个出度为零的终止点ti(ti<ti+1)t_i(t_i,
现在要为每个起始点sis_i安排一个终止点tait_{a_i},
每个终止点tait_{a_i}要用且只能用一次,
一个方案合法,当且仅当存在sis_i到tait_{a_i}的路径,且这些路径没有交集。
当排列{an}\{a_n\}的逆序对数为偶数时,该方案贡献为11,否则为−1-1。
问所有方案的贡献和,答案对质数PP取模。
Constraint
N≤6×102N\le 6\times10^2M≤105M\le 10^5
P≤109+7P\le 10^9+7
Analysis
我们先考虑一个简单点的问题。K=2K=2且起始点为a1,a2a_1,a_2,终止点为b1,b2b_1,b_2。
记Wu,vW_{u,v}为uu到vv的路径数,
Fu,v,pF_{u,v,p}为路径up,vpup,vp第一次有交集是在点pp的方案数。
因为可行方案只有a1b1,a2b2a_1b_1, a_2b_2或者a1b2,a2b1a_1b_2,a_2b_1,
根据题目贡献的定义,可以得到答案是
−(Wa1,b1⋅Wa2,b2−∑iFa1,a2,i⋅Wi,b1⋅Wi,b2Wa1,b2⋅Wa2,b1−∑iFa1,a2,i⋅Wi,b1⋅Wi,b2)\begin{equation*}
\begin{aligned}
&W_{a_1,b_1}\cdot W_{a_2,b_2} - \sum_i F_{a_1,a_2,i}\cdot W_{i,b_1}\cdot W_{i,b_2} \\
-(&W_{a_1,b_2}\cdot W_{a_2,b_1} - \sum_i F_{a_1,a_2,i}\cdot W_{i,b_1}\cdot W_{i,b_2})
\end{aligned}
\end{equation*}
化简式子,发现答案是
Wa1,b1⋅Wa2,b2−Wa1,b2⋅Wa2,b1W_{a_1,b_1}\cdot W_{a_2,b_2} - W_{a_1,b_2}\cdot W_{a_2,b_1},
这个形式非常的优美,和2×22 \times 2 matrices行列式的公式是相类似的。
然后我们可以试验K=3K=3的情况,也可以对照n×nn \times n matrices行列式公式,
发现答案的形式是和行列式的计算公式是一样的。
那我们利用这个结论,不难得出这道题的解决方式。
算出每对起点终点(s,t)(s,t)间的路径数,这个用简单的拓扑排序就可以解决,
这相当于处理出[K×K][K\times K]的矩阵,然后根据行列式的性质,我们进行高斯消元,从而算出矩阵的行列式。
时间复杂度:O(N(N+M)+K3)O\left(N\left(N+M\right)+K^3\right)。
相关文章推荐
- android源码设计模式解析与实战 读书笔记 2 单例模式(上)
- 项目的平台切换
- 软件工程第二次作业 软件评价
- Java构造方法
- JAVA与C++传递、赋值以及返回对象(指针、引用)
- LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
- java项目——java中输出当前时间的各种方法
- 我是一只IT小小鸟读后感
- linux学习笔记:关机重启命令
- 超全!整理常用的iOS第三方资源
- 第13章 红黑树代码
- [置顶] 数据预处理
- 毫秒级的Curl
- 安装JDK包时出现 内部错误 2350 的解决办法
- js模块化编程
- 牌型种类
- PL/SQL Developer使用技巧、快捷键
- iOS开发-XML解析
- <LeetCode OJ> 216. Combination Sum III
- 什么是虚拟内存?