所有生成樹邊權和的和的求法

2021-10-07 11:58:46 字數 829 閱讀 2189

通常,矩陣樹定理算出的生成樹是邊權乘積的和。

如果計算所有生成樹邊權和的和,比較暴力的方法就是列舉一條邊,然後計算包含這條邊的生成樹個數。

這樣的時間複雜度是\(o(mn^3)\)的,最壞為\(o(n^3)\)。

考慮優化:

對於一條邊權為w的邊,將邊權設為關於x的多項式\(1+wx\)。

這樣,容易證出,最後的一次項係數就是答案。

把多項式代入高斯消元求值即可。

計算時保留兩項即可。

\((a+bx)*(c+dx)=ac+(ad+bc)x\)

\(\frac=\frac-\frac\)

**:

struct sjd

sjd(int a,int b)

sjd(int x) };

sjd operator+(sjd x,sjd y)

sjd operator-(sjd x,sjd y)

sjd operator*(sjd x,sjd y)

sjd niy(sjd x)

int gauss(sjd sz[31][31],int n)

} if(wz==-1)continue;

if(wz!=i)

}sjd z=niy(sz[i][i]);

for(int j=i+1;j}

for(int i=0;ians=ans*sz[i][i];

return ans.b;

}int a[500],b[500],c[500];sjd sz[31][31];

void addb(int a,int b,int c)

//......

邊權差值最小的生成樹 小資料

描述 description 小 s 最近學了最小生成樹,不過聰明的小 s 顯然對簡單的求最小生成樹不感興趣。現在小 s 想知道,對於乙個給定的圖,它的所有生成樹中,最大邊和最小邊的邊權差最小是多少。輸入格式 input format 第一行,兩個用空格隔開的整數 n 和 m,分別表示頂點數和邊數。...

演算法 最小生成樹的關鍵邊和偽關鍵邊

給你乙個 n 個點的帶權無向連通圖,節點編號為 0 到 n 1 同時還有乙個陣列 edges 其中 edges i fromi,toi,weighti 表示在 fromi 和 toi 節點之間有一條帶權無向邊。最小生成樹 mst 是給定圖中邊的乙個子集,它連線了所有節點且沒有環,而且這些邊的權值和最...

演算法 最小生成樹 所有點成樹有最小總權和

乙個無向圖,如果某個子圖中任意兩個定點都互相連通並且是一棵樹,那麼這棵樹就叫做生成樹。如果邊上有權值,那麼使得邊權和最小的生成樹叫做最小生成樹。找乙個起始點加入樹,對所有點尋找到到樹的距離,從中選擇最小的加入樹,再次更新距離,從中尋找最小的,直到所有點都加入樹。對權值進行排序,然後從小到大進行判斷,...