1. 程式人生 > >生成樹計數的MatrixTree定理

生成樹計數的MatrixTree定理

在省選級別的題目裡面,我們會發現有一類生成樹計數的題目。就是給定一個圖G={V,E},問這個圖生成樹有多少棵(節點和邊都不同)。
這裡我們可以用基爾霍夫矩陣做。我們定義一個圖有度數矩陣A,有鄰接矩陣B,其中Aii表示節點i的度數,其餘為0,Bij=1表示有邊(i,j),反之為0。那麼基爾霍夫矩陣就是C=AB
這裡先給出結論,生成樹的數量就是將C任意扔掉第r行第r列強行當做行列式求出來的值。
怎麼求行列式的值呢?強行展開O(n!)?我們有更簡單的方法。考慮一個上三角形式的行列式,其的值就是對角線乘積,那麼這和高斯消元過程很像,我們同時還有一個性質,就是行列式裡面某一行乘常數加到其他行上行列式的值是不變的,所以可以直接高斯消元成上三角形式,然後乘起來,時間複雜度O

(n3)
證明可以參照原論文。

相關推薦

成樹計數MatrixTree定理

在省選級別的題目裡面,我們會發現有一類生成樹計數的題目。就是給定一個圖G={V,E},問這個圖生成樹有多少棵(節點和邊都不同)。 這裡我們可以用基爾霍夫矩陣做。我們定義一個圖有度數矩陣A,有鄰接矩陣B

生成成樹計數 --- Matrix-Tree定理(基爾霍夫矩陣樹定理)

模板題點這 題目大意: *一個有n座城市的組成國家,城市1至n編號,其中一些城市之間可以修建高速公路; *需要有選擇的修建一些高速公路,從而組成一個交通網路; *計算有多少種方案

成樹計數(Matrix-Tree定理

以下轉載自http://blog.csdn.net/jarily/article/details/8901363 /* *演算法引入: *給定一個無向圖G,求它生成樹的個數t(G); * *演算法思想: *(1)G的度數矩陣D[G]是一個n*n的矩陣,並且滿足:

成樹計數-Matrix-Tree定理

/* *演算法引入: *給定一個無向圖G,求它生成樹的個數t(G); * *演算法思想: *(1)G的度數矩陣D[G]是一個n*n的矩陣,並且滿足:當i≠j時,dij=0;當i=j時,dij等於vi的度數; *(2)G的鄰接矩陣A[G]是一個n*n的矩陣,並且滿

UVA10766(Organising the Organisation)成樹計數-Matrix-Tree定理

/* *題目地址: *http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1707; * *題目大意:

uva10766成樹計數

als mes art 算子 技術分享 math 個數 main mat 此類題是給定一個無向圖,求所有生成樹的個數,生成樹計數要用到Matrix-Tree定理(Kirchhoff矩陣-樹定理) G的度數矩陣D[G]是一個n*n的矩陣,並且滿足:當i≠j時,dij=0;當i

hdu4305成樹計數

open assert with for def com false tor == 先預處理出距離,然後判斷是否可行,要註意判斷是否在一條直線上時判斷是在兩側還是一邊(wa了四次) double型數據 #include<map> #include<se

【BZOJ2467】[中山市選2010]成樹 矩陣樹定理

n) 生成樹 scan ans 中山市選 work font 以及 pri 【BZOJ2467】[中山市選2010]生成樹 Description 有一種圖形叫做五角形圈。一個五角形圈的中心有1個由n個頂點和n條邊組成的圈。在中心的這個n邊圈的每一條邊同時也是某一個

成樹計數及應用 Matrix-Tree

log blog 生成樹計數 mathjax 插值 tps 生成樹 www. 應用 例:給定一個圖,圖上每條邊是紅色或藍色,求恰有 k 條紅邊的生成樹個數. n≤50. Matrix-Tree定理,對於限制條件可以利用多項式,把紅邊邊權設為 X,藍邊為1. 最後求行列式得到

【LOJ】#2320. 「清華集訓 2017」成樹計數

rac res 然而 除了 加法 wap OS 代碼 reg 題解 我,理解題解,用了一天 我,卡常數,又用了一天 到了最後,我才發現,我有個加法取模,寫的是while(c >= MOD) c -= MOD 我把while改成if,時間,少了 六倍。 六倍。 六倍!!

[BZOJ1494]成樹計數

cto operator 個數 最後一行 判斷 state for break desc [BZOJ1494] [NOI2007]生成樹計數 Description 最近,小棟在無向連通圖的生成樹個數計算方面有了驚人的進展,他發現:·n個結點的環的生成樹個數為n。·n個結點

bzoj1494 成樹計數 (dp+矩陣快速冪)

sets 增加 set 基本 表示 2種 least 欺詐 main 題面欺詐系列... 因為一個點最多只能連到前k個點,所以只有當前的連續k個點的連通情況是對接下來的求解有用的 那麽就可以計算k個點的所有連通情況,dfs以下發現k=5的時候有52種。 我們把它們用類似於並

[成樹計數]

prufer序列 每個prufer序列對應一棵唯一的樹。 生成:得到一棵樹的prufer序列的方法是依次去掉編號最小的葉子節點(也就是度數為1的點),然後將這個點的父親加入佇列。直到剩下最後兩個點。這樣就可以得到一個長度為n的prufer序列。 根據prufer序列的生成方式可以得到:每個節點會在pru

BZOJ1494: [NOI2007]成樹計數(Berlekamp-Massey演算法)

傳送門 題解: 直接打表+BM算出遞推式,BM具體實現可以戳這裡 附上一份其醜無比的BM程式碼: const int L=4e2; namespace bm { int cnt,a[N],fail[N],delta[N]; vector <int> R[N]

1627 Join 成樹計數模板題

                                                                                   URAL - 1627   Join Businessman Petya recently bought a

清華集訓2017 成樹計數

題意: 給定 n n n個連通塊,每個連通塊的大小為

hdu4305Lightning 成樹計數(基爾霍夫矩陣)+高斯消元+逆元

題意:比較裸的生成樹計數問題。   如何處理生成樹計數問題? 基爾霍夫矩陣: if i==j  Kir[i][j] = i的度數 if i!=j   Kir[i][j] = i到j的平行邊的個數的負數 即,基爾霍夫矩陣 = 度數矩陣 - 鄰接矩陣 將基爾霍夫矩陣刪去第i

kuangbin專題八 UVA10766 (成樹計數)Organising the Organisation(請無視這篇文章)

題意: 給出n,m,k,代表一家公司有n個部門,編號1到n,有m組關係,表示i和j不能直接聯通,k代表主管部門,問你有多少種分層方案。另外,這道題的k可以忽略掉,所以他的範圍完全是嚇唬人的。 題解: 抱歉,這道題我真的無法弄的通俗的說出來

bzoj 1494: [NOI2007]成樹計數

55555555555555555555555555555555被虐哭了 調了兩個小時才調出來,簡直不要太坑。 論文還是比較良心的,就是初始矩陣好難構造的說。 最後迫不得已寫了個很挫的方法構造。 #include<iostream> #include<cs

成樹計數 NOI2007

這題一定要把狀態認識清楚,因為只選最後K個點的連通性作為狀態,所以一個狀態可能會對應很多的連邊的情況,由於無法找到特殊的狀態吧初始情況地推出來,所以初始情況需要暴力求解,然後再用矩陣加速。 #include <iostream> #include <cs