详细揭秘:低秩矩阵分解与矩阵树定理极简证明
低秩矩阵分解可用于解决特殊矩阵行列式求值,其中包括特殊图生成树计数问题。
回顾行列式的定义式:
对于求解
- 选取一个集合
S\sube\{1,2,\dots,n\} ; -
-
如果其中
例:矩阵树定理的证明
证明:给定一张图,令
D,A 分别为图的度数矩阵、邻接矩阵,则任意选定x 并删除D,A 中的第x 行、第x 列后,\det(D-A) 等于该图生成树个数。
对于一条边
相当于对每个不等于
- 如果选出了环,那么这些行加起来就是全零行,故对应贡献为
0 。 - 如果没有任何环,那么考虑与
x 相连的任意点p ,其只能选择(p,p) 上的1 ,因为(p,x) 被删去了,依此递推可以得到贡献为1 。
可以非常轻松地拓展至带权、有向版本推论。
例:Determinant
给定整数
n,c ,求解n\times n 的矩阵A_{i,j} 的行列式:A_{i,j}=\begin{cases}1,&i=j\\0,&i\ne j\land j\bmod i=0\\c,&\text{otherwise}\end{cases} 对
998244353 取模。
注意到
容易发现,
由于
由于
考虑计算贡献,令
后续优化可以移步完整题解查看。
例:能量场
给你一个长为
n 的序列a_{1\dots n} ,定义一条边(u,v) 的权值为a_u+a_v 。对于一张图,定义其权值为包含的所有边的权值乘积。求所有n 个点的有标号基环树的权值之和。对998244353 取模。
考虑基环树把环缩起来就是一颗树,而树的权值乘积很自然就能想到矩阵树定理,我们不妨枚举哪些点在环上,我们可以 DP 求出这些点构成的环的权值和,然后将这些点缩起来(边权、度数相加)做一次矩阵树定理,为了方便我们可以将代表这个环的点删去。
我们需要求
可以观察到
根据行列式的定义式,我们可以简单地将行列式求出:
后续优化可以移步完整题解查看。
思考:简单的生成树
给定两棵点数分别为
n,m 的树T_1,T_2 ,再构造一个无向图G ,G 包含T_1,T_2 的所有点、树边,且还包含所有跨越T_1,T_2 的点对所组成的边。求无向图
G 的生成树个数,对10^9+7 取模。
本题虽有其它解法,不过请尝试使用低秩矩阵分解解决。
:::info[解答]
在两棵树上分别断开若干条边,设形成的连通块点数分别为
问题转化为二分图生成树个数,左部点
依旧对
经过简单的推导,可得到答案为:
树形 DP 即可求解,时间复杂度
思考:Odd Namori
给定一个长为
n-1 的序列p_{2\sim n} ,求满足下列条件的有向图的权值和:
- 每个顶点的出度都为
1 。- 图中不存在偶环。
- 对于所有
i\in[2,n] ,图中不包含边i \to p_i 。一张图的权值定义为
2^c ,其中c 表示该图中的环数。答案对998244353 取模。
:::info[提示:如何计算一张图的合法生成子图权值和]
令
:::success[证明]
仿照对矩阵树定理的证明。对于一条边
相当于对每个点选择了一条出边。考虑每种方案的贡献:
- 如果选出了偶环,那么这些行在环上编号为奇数的减去在环上编号为偶数的即可得到全零行,故对应贡献为
0 。 - 如果没有任何偶环,那么每个环都有两种方向可选择,故贡献为
2^c ,符合题意。
:::
:::info[解答] 有了上面的结论,我们能轻松求解给定内向树的补图的答案。
记从
完全图对应的矩阵为
求行列式的矩阵为三个部分的和:
否则若替换第
如果
可以轻易线性计算,时间复杂度