Matrix tree定理 求生成樹的個數

2022-08-17 14:33:18 字數 3029 閱讀 2326

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)     

}if(!c[i][i]) return0;

ans = ans*c[i][i]%mod;

}return (ans+mod)%mod;

}

// hdu 4305

**參考地->

生成樹計數的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的結論網上可多,大概一條主要的就是,圖中生成樹的數量等於 ...