TopCoder SRM697 div1 hard【prufer序列】

題目大意:

n2000 個城市,每個城市有個權值wi ,任意兩個城市之間的道路數有wiwj 條。對於每種生成樹,設每個點的度數爲di ,其權值定義爲di 。問所有無根生成樹的權值和。答案對109+7 取模。

解題思路:

主要說一下思路和推導過程。
考慮生成樹中的一條邊 (i,j)wiwj 種選擇,那麼一種生成樹有 widi 種同構,所以一種生成樹的權值其實是(wididi)

考慮prufer序列,一個prufer序列對應一種無根樹,且一個點度數爲 a ,就會在序列中出現 a1 次,那麼

ans=ai=2n2(n2)!(ai1)!(wiaiai)
=(n2)!wiai=n21ai![wiai(ai+1)]

考慮後半部分怎麼算,即

a1++an=n21a1!an!w1a1wnan(a1+1)(an+1)

(a1+1)(an+1) 展開,計算每個單項式的貢獻,如a1a2a3 ,那麼有:

a1++an=n21a1!an!w1a1wnana1a2a3=w1w2w3a1++an=n231a1!an!w1a1wnan=w1w2w3(w1++wn)n23(n23)!

據此,我們可以推斷出,原式就等於:

k=0n2(1p1<p2<<pkni=1kwpi)(w1++wn)n2k(n2k)!

fk 表示選 kwi 的乘積和,可以用O(n2) 的dp預處理出,那麼
ans=(n2)!wik=0n2 fk (w1++wn)n2k(n2k)!

時間複雜度O(n2)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章