1. 程式人生 > >[kuangbin帶你飛]專題八 生成樹 題解彙總

[kuangbin帶你飛]專題八 生成樹 題解彙總

本來準備省賽和其他的比賽先不打算做kuangbin專題了,不過我朋友AK了最小生成樹專題,問我繼續怎麼練。既然都練了最小生成樹,不如把後面的那個生成樹專題也啃了吧。然後clone生成樹專題,花了5天懟完。主要是中間一堆作業要懟,耽誤了很多時間。

我把我的題解和程式碼都放到了GitHub上了,有興趣的同學可以去看看哇!

前四題都是求次小生成樹,沒啥難度。基於kruskal演算法的思路比較簡單,先求最小生成樹,標記樹上的邊,然後列舉N-1條標記的邊,逐個刪去。看是否能求得原先的最小生成樹的值,能說明次小生成樹的值與最小生成樹相等。

基於prim演算法的改進思路比較優秀,演算法時間複雜度O(N^2) 網上很多部落格都有講述,我就不陳述了,貼一個好的連結。

後四題跟最小樹形圖有關,最小樹形圖其實就是有向圖的最小生成樹。 指定一個結點為根結點,求一個生成樹,使得根可以到達所有的結點,而且樹的邊權總和最小。 演算法是朱劉演算法,作為一箇中國人非常自豪這是國人的專利!!!

E題和F題都是模板題,就是練練模板,沒多大用處。

其中G題是個好題,最小樹形圖+虛根。虛根和所有結點連邊,邊權為 已有所有邊權和+1。

H題也是個要加虛根的題目,不過這個思路比較明顯,簡單題。

後面的題目都是生成樹計數題目,用到了Matrix_Tree定理。額,這可能就是智商的差異了吧,至少我沒完全搞懂那證明,碼農碼農,只會利用結論了。

構成出拉普拉斯矩陣矩陣後,求任意一個N-1階餘子式的行列式的值,這就是答案了。

自環對生成樹數目無影響,所以建邊忽略掉。不管是否有重邊,Matrix_Tree定理都是適用的。

我在GitHub放了一個證明的pdf,有興趣的同學可以去看看,英文版的。

題目都那個套路,構建好矩陣後就是簡單的求解行列式,用到高斯消元法。

最後附上一個截圖,記錄這幾天的成就哈哈哈哈