图论期中考试不允许提前交卷,没事干于是就想了想课堂上只介绍没证明的矩阵树定理怎么证明(当年打OI的时候把板子过了就没管了...),想到了一种纯粹从行列式每一项来考虑的证明方法,于是打算记录下来.当然这个方法早就有人想出来了,不想看我的证明的可以去看这两篇.
矩阵树(kirchhoff)定理:
设
G=(V,E)是一个无自环的无向图.
Dii(G)=degi,Dij=0,i=j
L(G)=D(G)−A(G)
图
G的所有生成树个数等于
L的任一
n−1阶代数余子式
证明:
先考虑
L的代数余子式
Mii
Mii=∑a(−1)sgn(a)∏j=iLjaj
其中
a是一个没有
i的排列,
sgn(a)表示
a逆序对的个数的奇偶性,偶数为
1,奇数为
−1
将
Lj,aj中
Djj和
Ajaj,aj=j分别写出来
Mii=∑a(−1)sgn(a)∏aj=jDjj∏aj=j(−1)Ajaj
考虑
(−1)sgn(a)∏aj=jDjj∏aj=j(−1)Ajaj代表什么
Djj表示任选点
j相连的边,
Ajaj表示选取
(j,aj)这条边
因为
a是一个排列,所以所有
(j,aj)相连会形成一个环(图论里称之为圈),而这些环正好对应这个排列
∏aj=jDjj∏aj=jAjaj于是代表选出一个至少包含有
(j,aj)这些边组成的环且
∣E∣=∣V∣−1的
G的子图的方案数
对于环上相邻三个(或两个)点
(j,aj)(aj,aaj),在排列中交换
aj和
aaj会使整个排列逆序对数量奇偶性反转,而环的大小减
1
因此对于每个环,环的大小
+1与该环代表的排列的逆序对个数奇偶性相同
因此
(−1)sgn(a)∏aj=j(−1)=(−1)sgn((j,aj)相连形成的子图的环的个数)
(−1)sgn(a)∏aj=jDjj∏aj=j(−1)Ajaj=(−1)sgn((j,aj)相连形成的子图的环的个数)∏aj=jDjj∏aj=jAjaj
生成树个数就是环的个数为
0且
∣E∣=∣V∣−1的
G的子图的个数,行列式就是对于环个数的一个容斥
现在考虑
Mij,i=j
这表示一定选择边
(i,j)的情况下对于环的个数做容斥
证毕
根据这个方法,有向图的生成树定理也很快就能推出来,这里不再赘述