題目大意:
有n≤2000 個城市,每個城市有個權值wi ,任意兩個城市之間的道路數有wi∗wj 條。對於每種生成樹,設每個點的度數爲di ,其權值定義爲∏di 。問所有無根生成樹的權值和。答案對109+7 取模。
解題思路:
主要說一下思路和推導過程。
考慮生成樹中的一條邊 (i,j) 有 wi∗wj 種選擇,那麼一種生成樹有 ∏wdii 種同構,所以一種生成樹的權值其實是∏(wdiidi)
考慮prufer序列,一個prufer序列對應一種無根樹,且一個點度數爲 a ,就會在序列中出現 a−1 次,那麼
ans=∑∑ai=2n−2(n−2)!∏(ai−1)!∏(waiiai)
=(n−2)!∏wi∑∑ai=n−21∏ai!∏[waii(ai+1)]
考慮後半部分怎麼算,即
∑a1+⋯+an=n−21a1!⋯an!wa11⋯wann(a1+1)⋯(an+1)
將(a1+1)⋯(an+1) 展開,計算每個單項式的貢獻,如a1a2a3 ,那麼有:
==∑a1+⋯+an=n−21a1!⋯an!wa11⋯wanna1a2a3w1w2w3∑a1+⋯+an=n−2−31a1!⋯an!wa11⋯wannw1w2w3(w1+⋯+wn)n−2−3(n−2−3)!
據此,我們可以推斷出,原式就等於:
∑k=0n−2(∑1≤p1<p2<⋯<pk≤n∏i=1kwpi)(w1+⋯+wn)n−2−k(n−2−k)!
設
fk 表示選
k 個
wi 的乘積和,可以用
O(n2) 的dp預處理出,那麼
ans=(n−2)!∏wi∑k=0n−2 fk (w1+⋯+wn)n−2−k(n−2−k)!
時間複雜度O(n2)