矩阵树定理

创建时间:2026-05-13


矩阵树定理

矩阵树定理(Matrix-tree Theorm),一个把生成树计数/求和转化为行列式求解的算法,属于近几年省选偏高频考点。

对无向图 \(G\),设 \(G\) 的邻接矩阵为 \(A\),定义:

  • \(G\) 的度数矩阵 \(D_{n \times n}\) 的矩阵,满足 \(D_{i, j} = \begin{cases} \deg(i) & i = j \\ 0 & i \neq j\end{cases}\)
  • \(G\)拉普拉斯矩阵(Laplacian matrix)\(L = D - A\)。如果 \(G\) 是简单的,可以理解为当 \(i=j\)\(L_{i, j}\) 表示 \(i\) 的度数;当 \(i \neq j\)\(L_{i, j}\) 表示 \(i, j\) 是否相邻有边。
  • \(L_{\complement i}\) 表示 \(L\) 删去第 \(i\) 行和第 \(i\) 列得到的矩阵。

矩阵树定理:\(G\) 的生成树个数等于 \(\det(L_{\complement k})\)\(k = 1, 2, \cdots, n\)

证明先咕了。

\(G\) 是有向图时,也有类似的结论:

  • 入度矩阵 \(D^{in}_{i, i} = \deg_{in}(i)\)\(L^{in} = D^{in} - A\),则 \(G\) 的以 \(k\) 为根的外向生成树个数等于 \(\det(L^{in}_{\complement k})\)
  • 出度矩阵 \(D^{out}_{i, i} = \deg_{out}(i)\)\(L^{out} = D^{out} - A\),则 \(G\) 的以 \(k\) 为根的内向生成树个数等于 \(\det(L^{out}_{\complement k})\)

注意:拉普拉斯矩阵的对角线一定要减去自环 \(A_{i, i}\)

矩阵树定理的应用

基础应用

矩阵树定理可以解决生成树计数问题,同时也可以处理形如 \(\sum\limits_{T 是 G 的生成树} \prod\limits_{e \in T} w_e\) 的生成树权值求和问题,只需要把 \(D\)\(A\) 的定义从边数修改为边值和。

例题:
P6178 【模板】Matrix-Tree 定理
P3317 [SDOI2014] 重建
P4336 [SHOI2016] 黑暗前的幻想乡
P4111 [HEOI2015] 小 Z 的房间
P4455 [CQOI2018] 社交网络
P2109 [NOI2007] 生成树计数

Cayley 公式

Cayley 公式:由 \(n\) 个节点构成的无根树的结构有 \(n^{n-2}\) 种。

扩展 Cayley 公式1:有 \(n\) 个节点,其中 \(t\) 个特殊点,连成 \(t\) 棵树的森林使任意两个特殊点不在同一颗树中有 \(t n^{n-t-1}\) 种方案。

扩展 Cayley 公式2:有 \(n\) 个点,已经被分成大小为 \(a_1, a_2, \cdots, a_m\) 的连通块,连成一棵树的方案数为 \(n^{m-2} \prod\limits_{i=1}^m a_i\)

写出拉普拉斯矩阵应用线性代数知识即可证明。

例题:
CF917D Stranger Trees

BEST 定理

设有向欧拉图 \(G\),设 \(t_k\) 为以 \(k\) 为根的内向生成树数量。

因为 \(G\) 中点 \(i\) 的出度入度相等,所以省略 \(\deg(i)\) 的上标。

引理:\(G\) 的以 \(k\) 为起点的非循环同构欧拉回路数量为 \(t_k \deg(k)! \prod\limits_{i \neq k} (\deg(i)-1)!\)

证明思路:为除 \(k\) 外每个点选择最后一条出边,存在欧拉路径当且仅当这些边形成以 \(k\) 为根的内向生成树,其它边任意顺序。

BEST 定理:\(G\) 的循环同构欧拉路径数量为 \(t_k \prod (\deg(i)-1)!\)\(k = 1, 2, \cdots, n\)

证明思路:在引理的基础上去重即可。

注:无向图欧拉路径计数已被证明是 #P-complete 问题。

例题:
P5807 【模板】BEST 定理 / Which Dreamed It
P7531 [USACO21OPEN] Routing Schemes P

矩阵树定理和多项式的结合

如果题目要求 \(\sum\limits_{T 是 G 的生成树} val(T)\),而 \(val(T)\) 不是简单的乘法运算,这时不能直接使用矩阵树定理,可以考虑通过多项式转成乘法运算。

例如,当 \(val(T) = \sum\limits_{e \in T} w_e\) 时,可以令 \(w'_e = w_e x + 1\),这样就有 \(val(T) = [x^1] \prod_{e \in T} w'_e\),可以使用矩阵树定理计算。

例题:
P6624 [省选联考 2020 A 卷] 作业题
#6271. 「长乐集训 2017 Day10」生成树求和 加强版

posted @ 2026-06-02 17:08  xubaichuan  阅读(11)  评论(0)    收藏  举报