线性代数
行列式
基本概念
记作 \(det(A)\) 或者 \(\lvert A\rvert\)。
求值:\(\sum\limits_p (-1)^{f(p)}\prod A_{i,p_i}\)
其中 \(f(p)\) 为 \(p\) 的逆序对数,\(p\) 取遍 \(1-n\) 的排列。
性质
- 上三角(右上)矩阵的值为主对角线乘积。
- \(\lvert I\rvert=1\)
- 交换矩阵两行,行列式变号
- 矩阵乘上一常数,行列式也相应乘上一常数
- 当矩阵有两行相等或者呈倍数关系,行列式为 \(0\)。
- 若两矩阵至多一行不相等,则将这一行相加所得矩阵的行列式为原来两个之和。
- 矩阵某一行加上另一行倍数,行列式不变。
高斯消元
矩阵求逆
利用 \(A^{-1} \times [A I]=[I A^{-1}]\) 来求解。
方法就是在 \(A\) 矩阵的右边再塞入一个单位矩阵,然后对于左边的 \(A\) 矩阵进行高斯-约旦消元。
行列式求值
利用初等变换将矩阵变成上三角矩阵,然后值就是对角线乘积。
注意细节如果交换两行,需乘以 \(-1\)。
例题
P2455 [SDOI2006] 线性方程组
加入了对于无解和无数解的判断,有点小麻烦。
无数解就是系数为 \(0\),等号另一侧也为 \(0\)。无解就是系数为 \(0\),等号另一侧不为 \(0\)
可以采用 cnt 记录已处理方程数,对于每个主元 \(x_i\) 对编号在 $ > cnt$ 之后的所有方程进行操作,而非对于 \(\ge i\) 的。这样最后剩下的 \([cnt+1,n]\) 即为各项系数全部为 \(0\) 的方程,判断一下即可。
P4035 [JSOI2008] 球形空间产生器
解多元二次方程题,可得对于 \(\forall i \in [1,n+1]\), \(\sum\limits_{j=1}^n(x_j-c_{i,j})^2=R^2\)
展开可得 \(\sum\limits_{j=1}^n x_j^2-2x_jc_{i,j}+c_{i,j}^2=R^2\)
观察一下形式,有平方项显然不太好处理,注意 \(c_{i,j}\) 为已知,所以这个无需处理。我们发现 \(R\) 与题无关显然不用求,于是考虑相邻两个式子作差,\(x_j^2\) 平方项以及 \(R^2\) 就消掉了。直接高斯消元即可。
P2447 [SDOI2010] 外星千足虫
加法同余式转化为异或方程组,可得:
\(\bigoplus\limits_{j=1}^n a_{i,j}\times x_j=b_i\)
注意这里是贪心最少的方程个数,所以方法就是尽可能在前面几个方程里面找就行了。
可以用 bitset 快速消元。
矩阵树定理
无向图
记 \(D_{i,j}=\begin{cases}
deg_i&i=j
\\0&i\neq j
\end{cases}\)
\(A_{i,j}=e_{i,j}\) (其中 \(e_{i,j}\) 代表 \(i \to j\) 重边数量)。
于是得到 \(L=D-A\),将 \(L\) 去掉第 \(i\) 行和第 \(i\) 列,得到的矩阵求行列式即可。
有向图
对于有向图就是把度数矩阵改为入度或者出度,根据要求的内向树还是外向树来决定使用入度还是出度。同时去掉的那一行和一列限制为 \(root\)。注意外向树答案为入度统计。
可以广义扩展一下,其实就是所有树边多项式乘积之和。
P6178 【模板】Matrix-Tree 定理
将边权改为重边即可。
P6624 [省选联考 2020 A 卷] 作业题
等学完了莫比乌斯反演在来写这题。