矩阵树定理学习笔记

矩阵树定理

问题:给定一张图,求生成树个数?

无向图

先考虑没有边权的情况。

定义邻接矩阵 $ A $ ,重边算多次,定义度数矩阵 $ D , D_{i,i} = deg (i) $ 。令 $ D \gets D - A $ 。

那么这张图的生成树个数为矩阵 $ D $ 去掉第\(k\)行和第\(k\)列后的行列式的值,$ k \in [1,n] $ ,得到的 \(n\) 个值是相等的,任取一个就好。

行列式

对于一个矩阵 \(H\) ,记 $ det(H) $ 为它的行列式。

其定义是:$ det(H) = \sum_{ P[1 \dots n] } (-1)^{\mu(P)} \prod_{i=1}^{n} H[i][P_i] $ ,其中 $ P[1 \dots n] $ 是一个排列, $ \mu(P) $ 表示其逆序对个数 。直接计算是 $ O(n\times n!) $ 的。

快速计算行列式,考虑如下性质:

  1. 交换两行或两列,行列式变为其相反数。
  2. 将一行或一列同时乘一个常数 \(k\) ,行列式乘 \(k\)
  3. 将一行加上另一行的\(k\)倍,行列式不变。

然后可以使用高斯消元求解。复杂度 $ O(n^3) $ 。

证明暂时不会。

再考虑加权。

发现加权等价于加重边,直接做。

有向图

\(A\) 仍然是邻接矩阵,但\(D\) 使情况而定,如果是内向树,$ D_{i,i} = outdeg (i) $ ;如果是外向树, $ D_{i,i} = indeg (i) $ 。

设 $ K_i $ 为 \(D\) 去掉第\(i\)行和第\(i\)列后的矩阵,则 $ det ( K_i ) $ 为以 \(i\) 为根的生成树个数。

例题

【模板】Matrix-Tree 定理

真模板。

P4336 [SHOI2016] 黑暗前的幻想乡

枚举 $ 2^{n-1} $ 的状态,简单容斥套模板。

P3317 [SDOI2014] 重建

考虑每条路都不能通行作为基础概率,在此之上选择 $ n-1 $ 条边构成生成树,计算对概率的影响。

posted @ 2025-06-04 14:06  Abnormal123  阅读(41)  评论(1)    收藏  举报