如果按照樹形態dp,是不可做的。
我們直接按照prufer序列組合數求即可。看成乙個 n-2 長度的序列。
對於固定的度,相當於盒子中放球,然後剩下的未定的,相當於從剩下位置中隨便放。
因為要高精度,所以用的py
ac**:
fac=[1
]*(1010
)def
c(n,m)
:return fac[n]
//fac[m]
//fac[n-m]
defmain()
: n=
int(
input()
) a=[1
]*(n+10
) fac[0]
=1for i in
range(1
,n+3):
fac[i]
=fac[i-1]
*i cnt=
0 res=
1 now=
0for i in
range(0
,n):
a[i]
=int
(input()
)if a[i]==-
1:cnt+=
1if a[i]
>=n:
print(0
)return
;if a[i]
>1:
now+=a[i]-1
if now>=
(n-1):
print(0
)return
; res=
int(
pow(cnt,n-
2-now)
) now=n-
2for i in
range(0
,n):
if a[i]
>1:
res*=
int(c(now,a[i]-1
))now-=
(a[i]-1
)print
(int
(res)
)main(
)
HNOI2008 明明的煩惱
傳送門 這題的弱化版 prufer 序列題。我們先考慮度數確定的點,記度數確定的點有 k 個,它們在 prufer 序列中一共出現 cnt 次。首先我們要從 prufer 序列的 n 2 個位置中選 cnt 個來放這些點,然後我們考慮 先不確定其它 n k 個點的位置,此時方案數為 frac 那麼剩...
洛谷P2624 HNOI2008 明明的煩惱
題目描述 題解 來補一補 purfer text purfer 序。可以考慮每次選擇編號最小的葉子,然後刪掉並且在序列中新增加與它連邊的節點。這樣會得到乙個長度為 n 2 n 2n 2 的序列。考慮如何將乙個 n 2 n 2n 2 的序列變成一棵樹。首先我們可以得到每個點的度為序列 現次數 1 1 ...
HNOI2008 玩具裝箱
p教授要去看奧運,但是他捨不下他的玩具,於是他決定把所有的玩具運到北京。他使用自己的壓縮器進行壓 縮,其可以將任意物品變成一堆,再放到一種特殊的一維容器中。p教授有編號為1.n的n件玩具,第i件玩具經過 壓縮後變成一維長度為ci.為了方便整理,p教授要求在乙個一維容器中的玩具編號是連續的。同時如果乙...