1. 程式人生 > >[BZOJ2159]Crash 的文明世界(第二類斯特林數 + 樹形 DP)

[BZOJ2159]Crash 的文明世界(第二類斯特林數 + 樹形 DP)

Address

Solution

  • 好久沒寫部落格了,來水一篇
  • 發現一個困難: d i s t ( i
    , j ) k dist(i,j)^k
    沒有可加性
  • 換句話說, ( d
    i s t ( i , j ) + 1
    ) k (dist(i,j)+1)^k
    不能用僅含 d i s t ( i , j ) k dist(i,j)^k 的式子表示出來
  • 使用二項式定理展開 ( d i s t ( i , j ) + 1 ) k (dist(i,j)+1)^k ,可以做到 O ( n k 2 ) O(nk^2) 的優秀複雜度,拿到 50 50 分的優秀得分
  • 考慮等式
  • i k = j { k j } × ( i j ) × j ! i^k=\sum_j\begin{Bmatrix}k\\j\end{Bmatrix}\times\binom ij\times j!
  • 證明右轉 蒟蒻的部落格
  • 其中 { n m } \begin{Bmatrix}n\\m\end{Bmatrix} 為第二類斯特林數,即 n n 個元素劃分成 m m 個無序非空集合的方案數, ( n m ) \binom nm 為組合數 ,即 n n 個元素中選出 m m 個無序元素的方案數
  • 把式子化一下
  • j = 1 n d i s t ( i , j ) k = j = 1 n h = 0 k { k h } × ( d i s t ( i , j ) h ) × h ! \sum_{j=1}^ndist(i,j)^k=\sum_{j=1}^n\sum_{h=0}^k\begin{Bmatrix}k\\h\end{Bmatrix}\times\binom{dist(i,j)}h\times h!
  • = h = 0 k { k h } × h ! × j = 1 n ( d i s t ( i , j ) h ) =\sum_{h=0}^k\begin{Bmatrix}k\\h\end{Bmatrix}\times h!\times\sum_{j=1}^n\binom{dist(i,j)}h
  • 於是我們要求的就是對於每個 1 u n 1\le u\le n 0 i k 0\le i\le k ,求
  • v = 1 n ( d i s t ( u , v ) i ) \sum_{v=1}^n\binom{dist(u,v)}i
  • 我們的狀態出來了
  • f [ u ] [ i ] f[u][i] 表示 u u u u 的子樹內的所有點的距離,的 ( d i s t i ) \binom{dist}i 之和
  • 根據優美的組合數公式 ( n m ) = ( n 1 m ) + ( n 1 m 1 ) \binom nm=\binom{n-1}m+\binom{n-1}{m-1} 得到
  • f [ u ] [ i ] = v s u b s t r e e [ u ] ( d i s t ( u , v ) i ) f[u][i]=\sum_{v\in substree[u]}\binom{dist(u,v)}i
  • = v s u b s t r e e [ u ] ( ( d i s t ( u , v ) 1 i ) + ( d i s t ( u , v ) 1 i 1 ) ) =\sum_{v\in substree[u]}(\binom{dist(u,v)-1}i+\binom{dist(u,v)-1}{i-1})