1. 程式人生 > >矩陣樹定理--luoguP4208 [JSOI2008]最小生成樹計數

矩陣樹定理--luoguP4208 [JSOI2008]最小生成樹計數

傳送門

以前用 d f s dfs 做的,用基爾霍夫矩陣真的玄啊

首先這道題有這麼幾個定理:(來自Z-Y-Y-S的部落格
定理一:如果 A ,

B A, B 同為 G G 的最小生成樹,且 A A 的邊權從小到大為 w
( a 1 ) , w ( a 2
) , w ( a 3 ) , w ( a n ) w(a_1), w(a_2), w(a_3), \cdots w(a_n)
B B 的邊權從小到大為 w ( b 1 ) , w ( b 2 ) , w ( b 3 ) , w ( b n ) w(b_1), w(b_2), w(b_3), \cdots w(b_n) ,則有 w ( a i ) = w ( b i ) w(a_i) = w(b_i)
證明:設 A , B A, B 第一個不同的邊的下標為 i i ,不妨設 w ( a i ) w ( b i ) w(a_i) \le w(b_i) ,如果不存在這樣的 i i ,無需證明。
情況一: a i a_i B B 中,為 b j b_j 。那麼顯然有 j > i j>i (否則 i i 不是第一個不同的邊),則有 w ( a i ) w ( b i ) w ( b j ) = w ( a i ) w(a_i)\le w(b_i) \le w(b_j) = w(a_i) ,所以有 w ( a i ) = w ( b i ) = w ( b j ) w(a_i) = w(b_i) = w(b_j) ,所以可以調換 b i , b j b_i, b_j 的位置, B B 的權值排列不會改變, A A B B 這樣前 i i 條邊均為相等,可以遞迴下去證明。
情況二: a i a_i 不在 B B 中。考慮將 a i a_i 加入 B B ,則形成了一個環,環中的權值 v w ( a i ) v\le w(a_i) (否則 B B 不是最小生成樹),且一定有一條邊 b j b_j 不在 B B 中,此時仍有 j > i j>i (否則 i i 不是第一個不同的邊),所以有 w ( a i ) w ( b i ) w ( b j ) w ( a i ) w(a_i)\le w(b_i) \le w(b_j) \le w(a_i) ,所以仍有 w ( a i ) = w ( b i ) = w ( b j ) w(a_i) = w(b_i) = w(b_j) ,可以將 b j b_j 替換為 a i a_i B B 的權值排列不會改變且仍為最小生成樹,仍然調換 b i , b j b_i, b_j 的位置, B B 的權值排列仍會改變,這樣 A A B B i i 條邊均為相等,可以遞迴下去證明。這樣換邊不會有問題,因為 Kruskal 演算法中唯一的狀態就是連通性,我們沒有改變其連通性,所以是可以遞迴證明的。

定理二:如果 A , B A, B 同為 G G 的最小生成樹,如果 A , B A, B 都從零開始從小到大加邊( A A A A 的邊, B