Matrix-Tree 定理

  • 行列式的定义

对于一个矩阵 A[1...n][1...n]A[1...n][1...n] ,其行列式为

det⁡(A)=∑P(−1)μ(P)∏i=1nA[i][pi]det(A)=P∑​(−1)μ(P)i=1∏n​A[i][pi​]

(枚举排列 P[1...n]P[1...n] ,其中 μ(P)μ(P) 为排列 PP 的逆序对数)

( det⁡(A)det(A) 又作 ∣A∣∣A∣ )

也就是说在每一挑一个乘起来,然后再拿逆序对有关的东西做系数。

直接按照定义计算,复杂度是 O(n!⋅n)O(n!⋅n) 的。

  • 行列式的性质

知道了下面几条性质之后,我们就能快速计算行列式了。

  • (0) 单位矩阵 II 的行列式为 11 。

这个比较显然,因为 PP 除了对角线之外没有别的选择,而对角线乘积为 11。

类似的,上三角矩阵和下三角矩阵的行列式都是对角线乘积。

  • (1) 交换矩阵的两行,行列式变号。

(根据逆序对感性理解即可)

我们考虑对于每个排列,这一次交换只会影响乘积组前面的逆序对系数。

对于任意一个序列,交换两个数对于逆序对个数的影响必定为奇数(可以自己讨论一下)。

所以逆序对系数全部都改变,即变号。

  • (2) 若某一乘以 tt ,行列式就也乘以 tt 。

这个比较好理解,因为这一行选且只选一个嘛。

  • (3) 看公式:

∣a+a′b+b′cd∣=∣abcd∣+∣a′b′cd∣∣∣∣∣∣​a+a′c​b+b′d​∣∣∣∣∣​=∣∣∣∣∣​ac​bd​∣∣∣∣∣​+∣∣∣∣∣​a′c​b′d​∣∣∣∣∣​

还是因为一行选且只选一个,然后乘法分配律就好了。

(2,3合起来就是的线性性)

  • (4) 有某两行一样的矩阵,行列式是 00.

这个证明比较巧妙 : 考虑交换相同的这两行,根据(1)得行列式变号

但是矩阵并没有实质的改变,行列式不变,所以行列式的值只能是 00.

  • (5) 用矩阵的一行加上另一行的倍数,行列式不变。

考虑构造(省略的部分表示不变):

欲证∣abc...def∣=∣abc...d+kae+kbf+kc∣∣∣∣∣∣∣∣​a.d​b.e​c.f​∣∣∣∣∣∣∣​=∣∣∣∣∣∣∣​a.d+ka​b.e+kb​c.f+kc​∣∣∣∣∣∣∣​

首先构造一个∣abc...abc∣∣∣∣∣∣∣∣​a.a​b.b​c.c​∣∣∣∣∣∣∣​,根据(4)得其值为0.

又根据(2)得∣abc...kakbkc∣∣∣∣∣∣∣∣​a.ka​b.kb​c.kc​∣∣∣∣∣∣∣​也为0。

然后根据(3)得

∣abc...d+kae+kbf+kc∣=∣abc...def∣+∣abc...kakbkc∣=∣abc...def∣∣∣∣∣∣∣∣​a.d+ka​b.e+kb​c.f+kc​∣∣∣∣∣∣∣​=∣∣∣∣∣∣∣​a.d​b.e​c.f​∣∣∣∣∣∣∣​+∣∣∣∣∣∣∣​a.ka​b.kb​c.kc​∣∣∣∣∣∣∣​=∣∣∣∣∣∣∣​a.d​b.e​c.f​∣∣∣∣∣∣∣​

  • 消元求行列式

其实我们上面证明的性质,就是为这个来打基础的。

我们消元的时候,只是用了 {交换两行, 某一行乘一个常数, 一行加上另一行的倍数} 三种操作。

那么,我们对于 AA 进行消元,然后记录操作对于行列式的影响,最后得到上三角矩阵,行列式就是对角线乘积,如果消不出来那么返回 00。

最后再把影响逆回去即可。

2.矩阵树定理与部分扩展

(默认图中无自环)

  • 经典

给出一个无向无权图,设 AA 为邻接矩阵, DD 为度数矩阵( D[i][i]=D[i][i]=节点 ii 的度数,其他的无值)。

则基尔霍夫(Kirchhoff)矩阵即为 : K=D−AK=D−A

然后令 K′K′ 为 KK 去掉第k行与第k列(k任意)的结果(n−1n−1阶主子式),

det⁡(K′)det(K′) 即为该图的生成树个数。

证明不会。感兴趣的同学可以自行百度。

例题 : P4336 [SHOI2016]黑暗前的幻想乡

  • 加权扩展

容易理解 : 带重边的情况,上面的经典矩阵树定理也是能够处理的。

根据乘法原理,对于某种生成树的形态,其贡献为每条边重的次数的乘积

如果把重边次数理解成权值的话,那么矩阵树定理求的就是 : 所有生成树边权乘积的总和。

(这里注意度数矩阵变成了相邻边的权值和)

例题 : P3317 [SDOI2014]重建

  • 有向扩展

前面都是无向图,神奇的是有向图的情况也是可以做的。

(邻接矩阵 AA 的意义同有向图邻接矩阵)

那么现在的矩阵 DD 就要变一下了。

若 D[i][i]=∑j=1nA[j][i]D[i][i]=j=1∑n​A[j][i] ,即到该点的边权总和(入)

此时求的就是外向树 (从根向外)

若 D[i][i]=∑j=1nA[i][j]D[i][i]=j=1∑n​A[i][j] ,即从从该点出发的边权总和(出)

此时求的就是内向树 (从外向根)

(如果考场上不小心忘掉了,可以手玩小样例)

(同样可以加权!)

此外,既然是有向的,那么就需要指定根

前面提过要任意去掉第 kk 行与第 kk 列,是因为无向图所以不用在意谁为根。

在有向树的时候需要理解为指定根,结论是 : 去掉哪一行就是那一个元素为根。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值