线性代数
矩阵
行列式
行列式求值,其中 \(P\) 是排列,\(\pi(P)\) 是逆序对数。
另一种递归式定义:
注意到 gauss 消元后形成一个上三角矩阵,而该矩阵的行列式很好算,即 \(\prod a_{i,i}\)。由于 gauss 消元过程中都是初等行变换,考虑计算变换后行列式的变化。
- 交换两行,行列式乘以 \(-1\)。
- 一行乘以 \(k\),行列式乘以 \(k\)。
- 一行乘以 \(k\) 加到另一行,行列式不变。
int det(int n){
int res=1;
for(int i=2;i<=n;i++){
int r=i;
for(int j=i+1;j<=n;j++)if(a[j][i]>a[r][i])r=j;
if(!a[r][i])continue;
if(r!=i){
res=-res;
for(int j=i;j<=n;j++)swap(a[i][j],a[r][j]);
}
for(int j=i+1;j<=n;j++){
while(a[j][i]){
int d=a[i][i]/a[j][i];res=-res;
for(int k=i;k<=n;k++)a[i][k]=mod(a[i][k]+p-(ll)d*a[j][k]%p),swap(a[i][k],a[j][k]);
}
//有逆时直接乘逆元也行
}
}
if(res<0)res+=p;
for(int i=2;i<=n;i++)if(a[i][i])res=(ll)res*a[i][i]%p;
return res;
}
矩阵的秩
矩阵的秩,指的是矩阵中线性无关的行(或列)的最大数目。
-
行秩:矩阵中线性无关的行的最大个数。
-
列秩:矩阵中线性无关的列的最大个数。
一个关键且优美的结论是:对于任何矩阵,其行秩始终等于其列秩。因此,我们统称为矩阵的秩。
设 \(A\) 是一个 \(m\times n\) 矩阵,其秩记为 \(\text{rank}(A)\),并且满足 \(0\le \text{rank}(A)\le \min(n,m)\)。
通俗的说
- 矩阵的秩 = 独立行(或列)的数量,如果一个行可以通过其他行的加减乘除得到,它就不独立。
- 看作线性方程组,矩阵的秩 = 真正有用的方程个数,其他方程都是这些方程的重复或组合
所以 \(\text{rank}(A)\) 是将 \(A\) 化为行阶梯形后(高斯消元)非零行的个数,或者说非零子式(任选 \(k\) 行 \(k\) 列构成行列式)的最高阶数。
\(\text{rank}(A)\) 即为当 \(\text{rank}(A)=\min(n,m)\) 时称其满秩,容易发现对于一个方阵,满秩与行列式不为 \(0\) 互相等价。
Tutte 矩阵
完美匹配
考虑设计矩阵 \(G\)。
对于 \(i\le j\),如果 \(i\) 到 \(j\) 有边,那么 \(G_{i,j}=x_{i,j}\),\(G_{j,i}=-x_{i,j}\)。否则 \(G_{i,j}=G_{j,i}=0\)。
结论:\(\det(G)\ne 0\) 等价于图存在完美匹配。
证明可以考虑 \(\det(G)\) 的定义
如果该式存在贡献,那么对于 \(\forall i\),\(i\) 到 \(p_i\) 必然有边,产生贡献的边形成了若干个环。
注意到如果这些环中有奇环,那么把环翻转后 \(G\) 的乘积恰好取反,而逆序对不变。因此奇环的两种情况抵消。
所以只需要考虑只有偶环的情况。此时每个偶环内的点必然存在匹配。而如果存在匹配,那么这些点两两成环必然合法。证毕。
最大匹配
考虑怎么求最大匹配,大胆猜测:答案是 \(\frac{\text{rank}(G)}{2}\)。回忆一下,矩阵的秩是什么?
设 \(M\) 为其最大匹配,
-
证明 \(\text{rank}(G)\ge 2|M|\)。假设 \(M\) 覆盖的顶点集合为 \(S\),\(|S|=2|M|\)。将顶点重新排序,使得 \(S\) 中的顶点对应前 \(2|M|\) 行和前 \(2|M|\) 列,考虑 \(G\) 的由 \(S\) 诱导的主子矩阵 \(G[S]\),它是一个 \(2|M|\times 2|M|\) 的斜对称矩阵。
因为 \(M\) 是 \(S\) 的一个完美匹配,所以根据上面的结论有 \(\det(G[S])\ne0\),所以 \(G[S]\) 满秩,\(\text{rank}(G)\ge \text{rank}(G[S])=2|M|\)。
-
证明 \(\text{rank}(G)\le 2|M|\)。设 \(r=\text{rank}(G)\),因为 \(G\) 是斜对称矩阵,所以 \(r\) 是偶数。根据秩的定义,\(G\) 存在一个 \(r\) 阶主子矩阵 \(T\) 满足 \(\det(T)\ne 0\)。设 \(S\) 为其对应的顶点集合,那么 \(T\) 事实上就是子图 \(G[S]\) 的 Tutte 矩阵,因为 \(\det(T)\ne 0\),所以 \(G[S]\) 存在完美匹配,也是原图的一个匹配,并且匹配数为 \(\frac{r}{2}\)。所以得到 \(|M|\ge \frac{r}{2}\) 即 \(2|M|\ge r\)。
最小(大)权完美匹配
更改一下 \(G\) 的定义,在每个 \(G_{i,j}\) 后面乘一个 \(y^{w_{i,j}}\),然后 \(\det(G)\) 求出来就是一个关于 \(y\) 的多项式。以最小权完美匹配为例,结论:最小权完美匹配的权值等于 \(\det(G)\) 的系数非零项里 \(y\) 的最低次数除以 \(2\)。
假设其最小权完美匹配是 \(M=\{(u_1,v_1),(u_2,v_2),\cdots\}\),权值是 \(k\)。那么在算行列式时排列 \(p_{u_i}=v_i,p_{v_{i}}=u_i\) 一定会对 \(y^k\) 产生贡献,所以 \(y^k\) 系数是非零的。所以只需要证明次数 \(<k\) 的系数全零即可。考虑反证,假设排列 \(\sigma\) 对小于 \(y^r(r<k)\) 产生贡献,即 \(\sigma\) 是若干偶环。考虑将环长 \(\ge 4\) 的偶环拆成若干二元环。假设这个偶环上点集 \(\{s_1,s_2,\cdots,s_{2l}\}\),那么要么将其拆为 \(\{\{s_1,s_2\},\{s_3,s_4\},\cdots,\{s_{2l-1},s_{2l}\}\}\),要么就是 \(\{\{s_2,s_3\},\{s_4,s_5\},\cdots,\{s_{2l},s_{1}\}\}\),然后拆成权值和最小。注意到
所以这样拆之后权值和不会 \(>r\)。然后不断操作,最后一定拆成若干二元环且权值和 \(\le r\),又因为这若干二元环肯定是一个完美匹配,所以就与 \(k\) 是最小权完美匹配矛盾。
线性基
将长度为 \(n\) 的序列映射到长度为 \(\log V\) 的序列上。使其子集的异或集合相等。
可以 \(O(\log V)\) 插入,\(O(\log^2 V)\) 合并。通常解决子集异或问题,求 \(k\) 大的时候需要先通过线性变换使得任意 \(a,b\in S\) 满足 \(a\oplus b\ge\max(a,b)\)。
通常搭配 \(O(1)\) 合并的数据结构如 st 表。
可删线性基离线可做到 \(O(\log V)\),记录每个数的删除时间,每次插入从高位到低位贪心地选择最晚删除的数。在线 \(O(\log^2 V)\),https://www.luogu.com.cn/article/vd9qdrcd。
Matrix-Tree 定理
对于有向图 \(G\),定义
-
出度矩阵
\[D^{\text{out}}_{i,j}(G)=\left\{\begin{matrix} \deg^{\text{out}}(i) & i=j \\ 0 & i\ne j \end{matrix}\right. \] -
邻接矩阵,设 \(\#e(i,j)\) 为 \(i\) 连向 \(j\) 的边数。
\[A_{i,j}(G)=\left\{\begin{matrix} 0 & i=j \\ \#e(i,j) & i\ne j \end{matrix}\right. \] -
出度 Laplace 矩阵
\[L^{\text{out}}(G)=D^{\text{out}}(G)-A(G) \]
入度类似。于是有以 \(k\) 为根的内向生成树数量 \(t^{\text{root}}(G,k)\) 和外向生成树数量 \(t^{\text{leaf}}(G,k)\) 为
相当于将第 \(k\) 行第 \(k\) 列去掉后行列式的值。
定义 \(m\times n\) 的关联出度矩阵 \(M^{out}\) 为
同理得到关联入度矩阵。
简单推导可得 \(D^{out}=(M^{out})^{T}M^{out}\),\(A=(M^{out})^TM^{in}\)。所以有 \(L^{out}=(M^{out})^T(M^{out}-M^{in})\)。
引理:
对于图 \(G(V,E)\),如果子图 \(T(V,S)\) 是以 \(V\setminus W\) 为根的内向森林,当且仅当
通过分析可以知道,\(M^{out}_{S,W}\) 每行至多有一个 \(1\),当 \(\det(M^{out}_{S,W})\ne 0\) 时即代表每行恰好一个 \(1\) 且每一列恰好一个 \(1\),或者说 \(W\) 中每个点与 \(S\) 中一条边的起点形成双射,也可以说它们出度都为 \(1\)。
前半部分限制出度为 \(1\),那么后半部分应该限制无环。当前面不为 \(0\) 时,\(M^{out}_{S,W}-M^{in}_{S,W}\) 每行每列恰有一个 \(1\),但是可能有 \(1\) 或 \(0\) 个 \(-1\)。如果存在环,容易发现通过若干次一行加到另一行上最终会使得一行为 \(0\),又由于该操作不改变行列式,故原行列式也为 \(0\),如
并且当该式不为 \(0\) 时,可以通过该操作使得每行有且仅有一个 \(1\),则此时 \(\det(M^{out}_{S,W}-M^{in}_{S,W})=\det(M^{out}_{S,W})\)。所以原式也 \(=\det(M^{out}_{S,W})^2=1\)。
Cauchy–Binet 公式:
对于 \(n\times m\) 的矩阵
联立引理可证明矩阵树定理,令 \(W=[n]\setminus\{k\}\):
扩展
带边权。会发现实际上算的是所有生成树边权乘积的和。
因为将关联矩阵重定义为
则引理算出来的行列式即为 \(\prod w_i\)。
求所有生成树边权和的 \(k\) 次方的和。
只需要把乘法变成加法,容易想到类似于原根的东西。
相当于将矩阵中的元素变成一个多项式,重定义加减乘除。对于本题来说,有
或者也可以理解为已知 \(w=w_1+w_2+\cdots w_{k-1}\) 的 \(0\sim k\) 次方,求 \((w+w_k)\) 的 \(0\sim k\) 次方。
答案就是 \(\det(k)\)。
应用
Cayley 公式
\(n\) 个点的完全图生成树数量为 \(n^{n-2}\),写出 Laplace 矩阵,用行列式知识可以得到。
Best 定理
对于一个有向欧拉图,其不同欧拉回路的数量为
由于欧拉图出度和入度相等,所以令 \(\deg(u)=\deg^{\text{out}}(u)=\deg^{\text{in}}(u)\)。只用考虑固定从 \(k\) 出发。
容易发现,由欧拉回路的性质,如果每个点除 \(k\) 外都取最后一条出边,则会构成一棵树。如果成环,意味着一个点在走完最后一条出边后还走了它的入边,显然不会构成欧拉回路。
于是每条欧拉回路都能对应一棵以 \(k\) 为根的内向树,除了树上的边外,其他边的顺序不固定,可以得到 \(t^{\text{root}}(G,k)\deg(k)!\prod_{u\in V,u\ne k}(\deg(u)-1)!\),但是 \(k\) 会在路径中出现 \(\deg(k)\) 次,所以一条路径会计算 \(\deg(k)\) 次,去重后便得到上式。
可以感性理解方案与欧拉回路间构成双射。

浙公网安备 33010602011771号