Matrix-Tree 定理

  首先推荐 GJS学长 的这篇博文: http://www.cnblogs.com/meowww/p/6485422.html .

Matrix-Tree 定理

  度数矩阵 $D$ . $D_{i, i} = i 的度数$ .

  邻接矩阵 $G$ . $G_{i, j}$ 表示 $i$ 到 $j$ 的连边数量.

  基尔霍夫矩阵 $K$ , $K = D - G$ .

  边矩阵 $B[m \times n]$ , 每行代表一条边, 对应位置的值为 $1$ .

  $B ^ T B = K$ .

  $B_i ^ T B_i = K_i$ .

  其中 $B_i$ 是 $B$ 去掉第 $i$ 行第 $i$ 列的代数余子式, $K_i$ 同理.

  说明  每行可以贡献在 4 个基尔霍夫矩阵的对应位置.

  Matrix-Tree 定理:

    $原图的生成树个数 = |K_i|$ .

  一般我们在计算的时候, 去掉最后一行最后一列, 然后用高斯消元的方法在 $O(n ^ 3)$ 求解.

  基尔霍夫矩阵有一定的小性质.

  1. $|K| = 0$ .

  证明  把所有都加到第一行.

  2. 若图不连通, $|K_i| = 0$ .

  证明  通过两次交换可以交换编号.

      利用该原理进行重编号.

      将矩阵分快, 一定有一个联通块是完整的基尔霍夫矩阵.

  3. 若该图是一棵树, 那么 $|K_i| = 1$ .

  证明  归纳法, 边界显然成立.

      交换编号, 使得一个度数为 1 的节点放在最后一位, 加上去, 然后按最后一列展开, 根据归纳假设得证.

常规证明

  根据 Cauchy-Binet 公式 ( 描述了行列式的值与矩阵乘法的关系 ) , $|K_i| = |B_i ^ T B_i| = \sum |选择 n-1 条边组成的基尔霍夫矩阵的余子式|$ .

  注意到对于 n-1 条边, 图要么不连通, 要么是一棵树.

  所以 $K_i = 生成树个数$ .

另一种证明

  去除掉第一行第一列, 那么剩余的矩阵类似一个除去了点 1 的基尔霍夫矩阵, 除了主对角线的每个与点 1 连通的位置有一个 $\Delta$ .

  考虑按照线性性质展开, 通过交换编号同理可说明, 最后所有与点 1 连通的位置会剩下 $\Delta$ , 其他位置没有影响.

  我们可以按照所有 $\Delta$ 展开, 得到了 $\Delta$ 的乘积 * 若干个不连通的块的基尔霍夫矩阵的余子式.

  根据归纳假设, 得证.

  这种方法从本质上把指数级别的暴力融入了行列式中, 类似的思想还有 Lindstorm - Gessel - Viennot 引理.

推广

  推广1 计算边权的乘积之和.

    如果边权都是整数, Matrix-Tree定理支持带有重边的图, 我们把每条边权 w 当做 w 条边, 然后跑 Matrix-Tree 即可.

    如果边权是有理数, 设 $t$ 为边权的最小公倍数, 我们给每个值乘上 $t$ , 然后再外界除以 $t ^ n$ , 再把 $t ^ n$ 扔进去, 就证明了 Matrix-Tree 定理对所有有理数都成立.

  推广2 有向图生成树计数

    基尔霍夫矩阵不再对称, 但仍然使用.

时间: 2024-10-16 13:19:05

Matrix-Tree 定理的相关文章

@算法 - [email protected] matrix - tree 定理(矩阵树定理)

目录 @0 - 参考资料@ @0.5 - 你所需要了解的线性代数知识@ @1 - 定理主体@ @证明 part - [email protected] @证明 part - [email protected] @证明 part - [email protected] @证明 part - 4@ @2 - 一些简单的推广@ @3 - 例题与应用@ @0 - 参考资料@ MoebiusMeow 的讲解(超喜欢这个博主的!) 网上找的另外一篇讲解 @0.5 - 你所需要了解的线性代数知识@ 什么是矩阵

HDU 4305 Lightning Matrix Tree定理

题目链接:https://vjudge.net/problem/HDU-4305 解法:首先是根据两点的距离不大于R,而且中间没有点建立一个图.之后就是求生成树计数了. Matrix-Tree定理(Kirchhoff矩阵-树定理).Matrix-Tree定理是解决生成树计数问题最有力的武器之一.它首先于1847年被Kirchhoff证明.在介绍定理之前,我们首先明确几个概念: 1.G的度数矩阵D[G]是一个n*n的矩阵,并且满足:当i≠j时,dij=0:当i=j时,dij等于vi的度数. 2.G

矩阵树定理(Matrix Tree)学习笔记

如果不谈证明,稍微有点线代基础的人都可以在两分钟内学完所有相关内容.. 行列式随便找本线代书看一下基本性质就好了. 学习资源: https://www.cnblogs.com/candy99/p/6420935.html http://blog.csdn.net/Marco_L_T/article/details/72888138 首先是行列式对几个性质(基本上都是用数学归纳法证): 1.交换两行(列),行列式取相反数 2.由1.得若存在两行(列)完全相同则行列式为0 3.上(下)三角行列式即主

最小生成树计数(matrix tree矩阵树定理)

Matrix-Tree 定理是解决生成树计数问题最有力的武器之一.它首先于 1847 年被Kirchhoff 证明. 在介绍定理之前, 我们首先明确几个概念: 1. G 的度数矩阵 D[G]是一个 n*n 的矩阵, 并且满足: 当 i≠j 时,dij=0:当 i=j时, dij 等于 vi 的度数. 2. G 的邻接矩阵 A[G]也是一个 n*n 的矩阵, 并且满足: 如果 vi. vj 之间有边直接相连,则 aij=1,否则为 0. 我们定义 G 的 Kirchhoff 矩阵(也称为拉普拉斯算

【算法】Matrix - Tree 矩阵树定理 & 题目总结

最近集中学习了一下矩阵树定理,自己其实还是没有太明白原理(证明)类的东西,但想在这里总结一下应用中的一些细节,矩阵树定理的一些引申等等. 首先,矩阵树定理用于求解一个图上的生成树个数.实现方式是:\(A\)为邻接矩阵,\(D\)为度数矩阵,则基尔霍夫(Kirchhoff)矩阵即为:\(K = D - A\).具体实现中,记 \(a\) 为Kirchhoff矩阵,则若存在 \(E(u, v)\) ,则\(a[u][u] ++, a[v][v] ++, a[u][v] --, a[v][u] --\

[BZOJ1016][JSOI2008]最小生成树计数(结论题)

题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1016 分析: 首先有个性质:如果边集E.E'都可以表示一个图G的最小生成树(当然E和E’的元素个数肯定一样),那么某确定权值的边在E中出现的次数==在E‘中出现的次数 简单证明一下: 按照Kruskal算法的流程来想,首先我们知道Kruskal求一个最小生成树是正确的,那么不同的最小生成树会怎么产生呢?当然是Kruskal选择权值相同的边的顺序,很有可能选择权值相同边的顺序不同导致后

[BZOJ1016] [JSOI2008] 最小生成树计数 (Kruskal)

Description 现在给出了一个简单无向加权图.你不满足于求出这个图的最小生成树,而希望知道这个图中有多少个不同的最小生成树.(如果两颗最小生成树中至少有一条边不同,则这两个最小生成树就是不同的).由于不同的最小生成树可能很多,所以你只需要输出方案数对31011的模就可以了. Input 第一行包含两个数,n和m,其中1<=n<=100; 1<=m<=1000; 表示该无向图的节点数和边数.每个节点用1~n的整数编号.接下来的m行,每行包含两个整数:a, b, c,表示节点a

Bzoj-生成树

代码两分钟...证明2小时(雾 这道题简单来说就是:要想很久但是代码一下子就能打完... 首先看数据范围猜算法系列--猜不出来... 接着看题...求生成树数目,转向百度,得到一个叫做matrix tree定理的东西...看完一脸懵啊...不会写... 算了既然点开还是写一写吧... 突然发现不用这个屮艸芔茻定理...爽! 观察一波,发现是某个完全联通图...生成树的性质是n个点n-1条边... 看这个图我们可以很容易(个屁)地发现,我们只要在n-1个五边形里删除1条边,再第1个五边形你删除2条

图论复习...

对于DIJ 如果边数远小于n^2,对此可以考虑用堆这种数据结构进行优化,取出最短路径的复杂度降为O(1):每次调整的复杂度降为O(elogn):e为该点的边数,所以复杂度降为O((m+n)logn) (V+E)log(V) 最短路应用 次短路,k短路,最短路径数量,判断负环 负权图(无正边,求最长路 //log 将乘法转换成加法 loga+...+logz=log a*...*z 并查集... kruskal ElogE+E*alpha(V) Matrix Tree定理计算生成树计数 所有最小生

BZOJ1002

传送门:BZOJ1002 似乎做法挺多,不过我并不懂得基于连通性的动态规划,于是只能做纯数学解法. 我们需要以下知识: Kirchhoff Matrix Tree定理: 设G为无向图,取E为图G的度数矩阵,F为图G的邻接矩阵 称矩阵E?F为图G的Kirchhoff矩阵R,任取与R同构的行列式R′的任意一个n?1阶主子式Q,其值为图G的生成树个数. 这个定理不是显然的,但我们在这里不证,因为它与本题的讨论无关. 取中心点为0号点,其余点按顺时针顺序标为1234-n,则有 R=???????????