matrix-tree定理:
對於乙個無向圖 g ,它的生成樹個數等於其基爾霍夫kirchhoff矩陣任何乙個n-1階主子式的行列式的絕對值。證明:
拉普拉斯矩陣(laplacian matrix)也可叫做基爾霍夫矩陣: 摘抄自->數學中的各種矩陣大總結
拉普拉斯矩陣是圖論中用到的一種重要矩陣,給定乙個有n個頂點的圖 g=(v,e),其拉普拉斯矩陣被定義為 l = d-a,其中為圖的度矩陣,為圖的鄰接矩陣。例如,給定乙個簡單的圖,如下(例子來自wiki百科):
把此「圖」轉換為鄰接矩陣的形式,記為a:
把w的每一列元素加起來得到n個數,然後把它們放在對角線上(其它地方都是零),組成乙個n×n的對角矩陣,記為度矩陣d,如下圖所示。其實度矩陣(對角線元素)表示的就是原圖中每個點的度數,即由該點發出的邊之數量。
根據拉普拉斯矩陣的定義l = d-a,可得拉普拉斯矩陣l 為:
顯然,拉普拉斯矩陣都是對稱的。此外,另外一種更為常用的拉普拉斯矩陣形式是正則化的拉普拉斯矩陣(symmetric normalized laplacian),定義為:
該矩陣中的元素由下面的式子給出:
// 暴力求行列式時間複雜度為 o(n!×n)
//一般方法高斯消元求行列式
// #define rep(i, n) for(int i=0;i!=n;++i)
// #define rep(i, sta, n) for(int i=sta;i!=n;++i)
int det(int c[maxn], int n)// hdu 4305}if(!c[i][i]) return0;
ans = ans*c[i][i]%mod;
}return (ans+mod)%mod;
}
**參考地->
生成樹計數的MatrixTree定理
在省選級別的題目裡面,我們會發現有一類生成樹計數的題目。就是給定乙個圖g 問這個圖生成樹有多少棵 節點和邊都不同 這裡我們可以用基爾霍夫矩陣做。我們定義乙個圖有度數矩陣 a 有鄰接矩陣 b,其中ai i 表示節點 i 的度數,其餘為0,bi j 1表示有邊 i,j 反之為 0 那麼基爾霍夫矩陣就是c...
模板 Matrix Tree 定理
點此看題 本題就是矩陣樹定理中外向樹的情況。矩陣樹定理原來求的是生成樹的數量,但是這裡要求生成樹邊權乘積之和,觀察行列式的定理,不難發現矩陣構建時換成邊權就行了。有兩個結論 原理作者沒有搞太懂,中考完了再深究吧。include include using namespace std define i...
數學 Matrix Tree定理證明
老久沒更了,冬令營也延期了 延期後豈不是志願者得上學了?最近把之前欠了好久的債,諸如fft和matrix tree等的搞清楚了 啊我承認之前只會用,沒有理解證明 fft老多人寫,而matrixtree沒人證我就寫一下吧 matrix tree的結論網上可多,大概一條主要的就是,圖中生成樹的數量等於 ...