[LOJ#2473][九省聯考2018]祕密襲擊(樹形DP+生成函式+線段樹合併+拉格朗日插值)
Address
The First Step - 轉化
簡版題意:給定一棵點帶權樹,求樹上所有大小大於
的連通塊的第
大值之和。
眾所周知,「第
大值」和「值
的排名」可以互相轉化。
所以,答案為:
The Second Step - DP狀態
如何求出「
的排名為
的連通塊個數」?
如果權值互不相同,那麼
的排名為
的連通塊個數就是「滿足
的權值有
個的連通塊個數」。
如果權值有相同,那麼
的排名為
,就必須保證
的權值個數至少
,但
的權值個數又要小於
。
於是
的排名為
的連通塊個數為「
的權值個數
的連通塊個數」
「
的權值個數
的方案數」。
設狀態
表示
為根的連通塊(包含空連通塊),
的權值個數為
的方案數。
這樣,答案就為:
The Third Step - DP轉移
關於連通塊計數的樹形 DP 是一個經典模型。
邊界:
轉移時列舉
的子節點
並列舉
的子樹包含的連通塊大小
:
為向
轉移之前的 DP 陣列。
最後加上空連通塊:
由於第三維的上界只有
的子樹大小,所以每對點都在 LCA 處貢獻
次,
複雜度
。
據說很多人用這種做法水過並跑得比標解快
The Fourth Step - DP優化
既然沒人寫正解,我就來水一發
發現
向子樹的轉移是一個卷積的形式。所以考慮生成函式。
設
為
的生成函式: