如果你不想看下面的證明,那麼只需要一句話:考慮生成樹的加邊過程,即為行列式求值過程。
基爾霍夫矩陣
首先對於任意矩陣,若出現行或列的線性相關那麼行列值即為\(0\),由行列式定義顯然
定義對於無向圖\(g(v,e)\)的關聯矩陣\(b\)
當\(u_i\in v,v_j\in v,e_k=(u_i,v_j)\in e\),有\(b_=1,b_=-1\)或\(b_=-1,b_=1\),
定義\(b^t\)為\(b\)的轉置矩陣\(b^t_=b_\),觀察他們兩個的乘積:
\[bb^t_=\sum_^nb_b^t_=\sum_^nb_b^t_
\]即\(b\)的第\(i\)行和\(b^t\)的第\(j\)行的點積。
同時發現如果\(i=j\),\(bb^t_=\deg_i\),如果\(i\neq j\),若有\((u_i,v_j)\in e\),則\(bb^t_=-1\),若無\((u_i,v_j)\in e\),則\(bb^t_=0\)
將\(bb^t\)稱為圖的基爾霍夫矩陣。
注意到圖的基爾霍夫矩陣\(c\)也恰好為其度數矩陣\(d\)減去其鄰接矩陣\(a\)。
0由轉置\(\det\)相等得行列等價,因交換\(i,j\)行或列的元產生\(2(j-i)-3\)次相鄰交換,即交換行列一定會變號
其他等價於矩陣。
行列式的值為高消變成上三角然後算主對角線積
對於乙個由4個\(k,k\)行列式\(a,0,c,b\)構成的大行列式\(d(2\times 2)\),\(d_1\)=\(\det(a_)\),\(d_2=\det(})\),有
\(\det(d)=\det(d_1)\det(d_2)\)
證明:對\(a,b\)高消變成下三角\(p,q\),發現\(\det(d)=\prod_i^kp_i\prod_i^kq_i=\det(d_1)\det(d_2)\)
對於乙個\(n\)階行列式,如果其中第\(i\)行除了\(a_\)外均為\(0\),那麼這個行列式等於其代數余子式與\(a_\)的乘積
證明:進行\(i-1+j-1\)次變換後為\((1,1)\)元,然後高消即為\((-1)^a_\times a_\)
矩陣樹定理
定義:對於乙個無向圖g,它的生成樹個數等於其基爾霍夫矩陣矩陣\(c\)任何乙個\(n-1\)階主子式的行列式的絕對值。
余子式\(c_\)定義為刪除第\(i\)行與第\(j\)列剩下的元素構成的行列式
代數余子式\(a_\)為\((-1)^\det(c_)\)
主子式定義為,對於任意乙個\(i\),將其第\(i\)行與第\(i\)列同時刪除得到的新矩陣命名為\(c_i\),也就是余子式的限制強了一些。
基爾霍夫矩陣\(c\)有如下性質
1\(\det(c)=0\)
2如果圖是不連通的,則其任意\(n-1\)階主子式為\(0\)
證明:考慮重變號後主對角線上處於同乙個連通分量的點連續,那麼對於乙個大小為\(k\)的連通分量\(x\)每行僅有連續的\(k\)個元不為\(0\),因為對於乙個連通圖的\(c\)為0,整個行列式的值為多個行列式值的積,因此為\(0\)。
3關於樹:
a:若圖g是乙個樹,那麼其\(c\)的任意主子式是1
b:若圖g是乙個樹,那麼其\(c\)的\((1,1)+1\)之後得到\(c'\),
\(\det(c')=1\)
c:若圖g是乙個樹,那麼其\(c\)的\((1,1)+1\)之後得到\(c',\)對於其主子式\(c_1,\det=1\)
對於證明有乙個良好的手段,將樹重標號,使得對於乙個點\(i\),其子樹內點的編號是連續的[l,r](對於主對角線上連續的一段是乙個子樹),然後欽點\(1\)為根。
如果b是對的,那麼明顯a是對的並且c也是對的。
接下來證明,如果c正確,那麼b也正確。如果b正確,那麼c也正確。
假設c正確。考慮證b正確,可以得到三個都正確
首先選出來的東西不能是0,這是一定的,所以對於任意一行的選擇只有是相對的根節點或者[l,r]。第一行明顯有兩種選擇,一種是選擇(1,1),因為假設c正確,考慮行列式的定義,貢獻是根的度數+1;如果是選擇(1,i),那麼一定之後會有一行選擇(j,1),並且這個點j一定會和根節點有直接的邊相連,因為對於乙個子樹的根j來說只有1和他自己能選j這一列且j這一列是必須選的,所以如果選了(1,j),一定要選(j,1)
如果選了(1,i)和(i,1),因為兩者都是-1且造成乙個逆序對,中間的逆序對個數一定是偶數因此乙個i的貢獻是-1,因為i有根的度數個,所以(1,1)+1之後行列式為1,所以b正確。
binet-cauchy定理
兩個矩陣a和b,a是\(n*m\)的,
而b是\(m*n\)的,那麼\(\det(ab)=\)
(1).0 當n>m
(2).\(\det(a)\det(b)\),當n=m
(3).\(\sum_\vert b_}^tb_}\vert=\sum_\vert b_}\vert^2\)
實際上就是原圖選了\(n-1\)條邊之後基爾霍夫矩陣行列式的余子式
因為不連通和成環均為0,所以只剩下樹的為1的貢獻,即無根有標號生成樹個數
別忘了是無根的
但是實際上算的時候是邊權積,所以算出來的生成樹是邊權積的和
舉例
考慮完全圖的n個點的有標號無根樹計數,
考慮去掉1的主子式,然後第一行加上其餘行變成全1,然後用第一行去加其餘行,那麼除了主對角線上是1,n,n...,n以外其餘均為0,
那麼就是\(n^\)
矩陣樹定理
構建基爾霍夫矩陣,基爾霍夫矩陣的任意乙個代數余子式是所有生成樹的邊權積的和,也就是求的是 sum limits t prod limits v e 基爾霍夫矩陣為度數矩陣減去鄰接矩陣 任意去掉一行一列,所得到的矩陣的行列式即為所求 外向樹為入度矩陣減去鄰接矩陣 內向樹出度矩陣減去鄰接矩陣 刪去根所在...
矩陣樹定理
includeusing namespace std const int n 505 const long long mod 1e4 7 long long det long long a n n int n 0 n 1 求行列式的值 long long tmp 1 for int i 0 i n ...
矩陣樹定理
quad 設無向圖有 n 個節點,拉普拉斯矩陣 l 是乙個 n times n 的矩陣。quad 矩陣構造方法 所有的 l 的值為節點 i 的度數,即有多少邊和節點 i 相連。所有的 l i 不等於 j 的值為節點 i 和 節點 j 之間相連的邊數的相反數 quad 將拉普拉斯矩陣去掉任意的一行和一...