矩陣樹定理學習筆記+洛谷3317 bzoj3534 SDOI2014 重建 矩陣樹定理+期望 +構造
阿新 • • 發佈:2019-02-19
題目連結
題意就是給你n個點,每兩個點之間有一條邊,這條邊存在的概率是,求生成樹個數。
我覺得這真是道神題!
首先先介紹一下矩陣樹定理,由於我不會,所以沒有給任何證明,只給了結論,想知道證明請自行搜尋。矩陣樹定理可以求一個無向圖的生成樹個數(似乎有向的也可以求,但是我還不會)。它的做法是這樣的:用鄰接矩陣存邊,的值為點到點的邊數的相反數,的值為點的度數。生成樹個數就是任意一個餘子式的值,餘子式是一個行列式去掉第行第列後的結果。求行列式的值可以用高斯消元,把行列式消成階梯型的(上三角),最終的答案是行列式對角線上所有數的乘積。
說明一下要用到的兩種行列式的初等變換:
1.互換行列式的兩行,行列式的值變為原來的相反數
2.將行列式一行的若干倍加到另一行,行列式的值不變
這兩種變換保證了在高斯消元時只有互換兩行時會改變原行列式的值,我們在進行消元的過程中只需要再記錄一下改變次數的奇偶即可。
我一開始就跪了!我一開始以為答案是
首先,第一個妙處在於對於任意一棵生成樹,它存在的條件應該是所有在這棵樹上的邊都存在,所有不在這棵樹上的邊都不存在。那麼根據乘法原理,任意一棵生成樹存在的概率應該是 所有我們要求的應該是 我們發現好像並不知道該怎麼樣直接求出這個式子的值。但是我們發現,用我之前那種錯誤的做法,我們可以得到的值,那麼現在開始了本題的又一個神奇之處了:構造!我們考慮去構造這個答案。我們讓原來的變為,令,由於我們是去構造最終答案,所以並不需要考慮原行列式的值發生了怎樣的變化。
另外我們在高斯消元之前還要記錄下。
進行高斯消元並按照矩陣樹定理計算答案的話,我們這時就會得到