舊題重做

[ZJOI2016]小星星

容斥是官方做法,不過用集合並卷積也可以推出同樣的dp式子。

樹形dp,令\(f_{x,i,S}\)表示以\(x\)爲根的子樹,\(x\)映射到\(i\),子樹全體映射到\(S\)的合法方案數。
考慮給當前的\(x\)添加一個以\(y\)爲根的子樹,令新的以\(x\)爲根的\(dp\)數組爲\(f'\),有:

\[f'_{x,i,S}=\sum_{(i,j)\in E}\sum_{A\cup B=S,A\cap B=\emptyset}f_{x,i,A}f_{y,j,B} \]

枚舉合法的\(i,j\),餘下的就是一個看上去像子集卷積的東西。

然而最終只需要\(S\)爲全集的方案,如果\(A\)\(B\)有交,那麼\(A\cup B\)必然小於新的\(x\)的子樹大小,最終不可能對答案產生貢獻。

於是考慮去掉\(A\cap B=\emptyset\)的限制,仍然保證答案的正確性,轉化爲集合並卷積:

\[f'_{x,i,S}=\sum_{(i,j)\in E}\sum_{A\cup B=S}f_{x,i,A}f_{y,j,B} \]

於是令\(\hat f\)表示\(f\)對最後一維做莫比烏斯變換之後的結果,有:

\[\hat f'_{x,i,S}=\hat f_{x,i,S}\sum_{(i,j)\in E}\hat f_{y,j,S} \]

初始狀態下\(f_{x,i,S}=[S=\{i\}]\),很容易得到莫比烏斯變換之後的結果。dp中不需要進行反演,保留莫比烏斯變換後的形式計算即可。

最後將根的全集方案數用莫比烏斯逆變換的公式算出來即可,複雜度也是\(O(n^32^n)\)

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