网上貌似证明的资料比较少而且不全,于是就来 水一篇博客。
定义
- 对于无向图,定义 (D(G)) 为图 (G) 的度数矩阵,其中:
- 对于有向图,定义 (D ^ {in}(G)) 为图 (G) 的入度矩阵,(D ^ {out}(G)) 为图 (G) 的出度矩阵,其中:
- 定义 (A(G)) 为图 (G) 的邻接矩阵,其中:
-
定义图 (G) 的 ( m kirchhoff) 矩阵 (K(G) = D(G) - A(G))。
-
定义无向图 (G) 的生成树数量为 (t(G)),有向图根向树生成树(根为 (u),下同)数量为 (t ^ {root}(G, u)),有向图叶向树数量为 (t ^ {leaf}(G, u))。
-
定义图 (G) 的关联矩阵 (M(G)) 为一个大小为 (n imes m) 的矩阵,其中(一下的方向对于无向图随意):
-
定义图 (G) 的减关联矩阵 (M_0(G)) 为关联矩阵 (M(G)) 去掉最后一行后的大小为 ((n - 1) imes m) 的矩阵。
-
定义图 (G) 的子减关联矩阵 (M_0(G)[S]) 为选出 (M_0(G)) 中的列构成子集 (S),满足 (|S| = n - 1, S subseteq {1, 2, cdots m})。
定理
以下默认所有数均为正整数。
- 无向图矩阵树定理:
- 有向图矩阵树定理:
- ( m Best) 定理:设有向欧拉图 (G) 的欧拉回路数量为 (ec(G)),则有:
其中对于欧拉图 (mathrm{in}, mathrm{out}) 均相同,因此 (deg) 可任选其一。
若要求欧拉回路起点 (k),则以 (k) 为起点的欧拉回路数量 (ec(G, k)) 为:
此定理下面暂不证明,先咕着。
证明
以下只证明无向图无根树生成树矩阵树定理。
1. 引理 (1):
可以发现当且仅当 (i, j) 都为边 (k) 的一个端点时,贡献不为 (0)。
若 (i = j) 则 (M(i, k) = M(j, k)) 贡献相等,那么两者乘积贡献 (1)。因此总贡献为 (deg_i)。
若 (i e j) 则 (M(i, k) e M(j, k)) 贡献相反,那么两者乘积贡献 (-1)。因此总贡献为 (-A(i, j))。
于是有引理 (1) 成立。
2. 引理 (2):
若 (S) 构成的边集在原图上构成生成树,那么 (det M_0[S] = 1 / -1) 否则 (det M_0[S] = 0)。
先证后者:
若原图没有构成树,那么至少存在一个简单环 (C(e_{i_1}, e_{i_2}, cdots e_{i_k})),记 (e_{{i_j}_u}, e_{{i_j}_v}) 分别为边 (e_{i_j}) 的两个端点。
同时,对于 (M_0[S]) 有如下两点观察:
-
对于同一行,恰好存在两列非 (0)。
-
对于同一列,恰好存在两行一行为 (1) 一行为 (-1)。(若为最后一行也可视作出现)
下面证明 (M_0[S]) 对应原 (M_0) 的 (i_1, i_2, cdots i_k) 列线性相关,考虑依次合并所有列:
我们首先拿第 (i_1) 列消 (i_2) 列,因为简单环上两边共点,因此至少存在一行使得两列上均非 (0),我们消掉这一行后根据观察 (2) 必恰好仅有 (e_{{i_1}_u}, e_{{i_2}_v}) 这两行一行为 (1) 一行为 (-1)。
假设合并到第 (i_j) 列,若 (j e k) 那么使用 (i_{j - 1}) 列合并的结果同第一列消第二列的方式消掉第 (i_j) 列,于是第 (i_j) 列消完后必恰好在 (e_{{i_1}_u}, e_{{i_j}_v}) 这两行一行为 (1) 一行为 (-1)。
最后合并到第 (i_{k - 1}) 列时,此时非 (0) 两行与原 (i_k) 列未消时一致,故此时可以将第 (i_k) 列消为全 (0)。
因此这 (i_1, i_2, cdots i_k) 列线性相关,(det M_0[S] = 0)。
再证前者:
考虑将原行列式消成好算的形式,类似于高斯消元的方式,我们钦定一行的主元拿此行去消所有行。
具体地,若 (S) 构成的边集为一棵树,那么必定能找到叶子节点 (u),此时选出 (u) 所在的行,必定恰好只存在一列非 (0),拿此列去消所有行(事实上只能消掉边的另一个节点所对应的行)。
可以发现这等价于每次在 (M_0[S]) 中删去树上叶子节点所对应的一条边,故此过程一定可以不断递归直至消去所有边。
最后我们发现,每一行都只剩下恰好一列为其做为叶子时所对应列为 (1 / -1),故此时行列式值仅在每行选这些列时非 (0),不论逆序对数量,所得行列式值均为 (1 / -1)。
3. 引理 (3)(( m Binet - Cauchy) 定理):
定义大小分别为 (n imes m, m imes n(n le m)) 的矩阵 (A, B) 则有:
其中 (A[S], B[S]) 分别表示 (A) 取 (S) 集合内的列,(B) 取 (S) 集合内的行所构成的矩阵。
证明引理 (3) 之前再给出两条引理:
定义 (lambda(P)) 为排列 (P) 的逆序对数量。
-
- 引理 (1):
-
定义 (P') 为 (P) 的逆排列,即满足 (P'_{P_i} = i),那么有:
(quad) 不妨转化 (P') 的逆序对求法,不难发现等价于给定序列 (A),每个元素存在两个关键字 (x, y),其中 (A_{i_x} = p_i, A_{i_y} = i)。
(quad) 那么 (lambda(P')) 等价于将将序列 (A) 按照第一关键字排序后以第二关键字为权值的逆序对数量。
(quad) 在这里等价于按照权值排序后求下标的逆序对,这与直接求原排列的逆序对是等价的。
-
- 引理 (2):
-
定义 (P_{Q}) 为排列 (Q) 与排列 (P) 的复合,则 (lambda(P_{Q})) 与 (lambda(P) + lambda(Q)) 的奇偶性相同。
(quad) 仿照引理 (1) 的证明方法,那么左式等价去求给定序列 (A),每个元素存在两个关键字 (x, y) 其中 (A_{i_x} = P_i, A_{i_y} = Q'_i),
(quad) 那么 (lambda(P_Q)) 等价于按照第一关键字排序后以第二关键字为权值的逆序对数量。
(quad) 考虑调整证明,可知一开始的逆序对数量为 (lambda(Q') = lambda(Q)),排序利用冒泡排序的过程,可知有效的交换仅有 (P) 的逆序对个。
(quad) 而我们知道每交换排列里两个元素排列逆序对数奇偶性改变,故总共改变 (lambda(P)) 次,所以 (lambda(P_Q)) 与 (lambda(P) + lambda(Q)) 奇偶性相同。
首先我们展开等式右侧:
再展开等式左侧:
仔细观察可知,对于可重排列 (R),若 (exist i < j, R_i = R_j) 那么交换 (P_i, P_j) 后后面的积式不变,但逆序对奇偶性改变,因此两者贡献互为相反数可抵消。
因此我们只需钦定每个 (exist i < j, R_i = R_j) 的可重排列 (R),让其和交换满足条件的最小 (P_i, P_j) 交换后的排列 (P) 的贡献相抵即可。
因为交换最小的 (i, j) 后依然满足 (i, j) 为最小的满足条件的点对,因此可以两两唯一配对。
故我们只需枚举不重的序列即可,为此我们首先枚举 ({1, 2, cdots m}) 的子集,然后枚举一个长度为 (n) 的排列 (Q):
整理即可得到从右侧推导得到的式子。
下面我们只证明矩阵树定理删去最后一行最后一列是正确的(对于删去其余的情况,只需将 (M_0) 的定义修改成删去改行即可)。
类似于引理 (1),我们知道 (K_0 = M_0 imes M_0 ^ T) 其中 (K_0) 为 (K) 去掉最后一行和最后一列得到的方阵。
再根据引理 (3),可知:
由定理 (2),若边集 (S) 不构成生成树,则 (det(M_0[S]) = 0),在该式中贡献为 (0)。
若边集 (S) 构成生成树,则 (det(M_0[S]) = 1 / -1),在该式中贡献为 (1)。
故可得到 (det K_0) 即为原图的生成树数量。