2021牛客暑期多校训练营4 D-Rebuild Tree(prufer序列+树形dp)
生活随笔
收集整理的這篇文章主要介紹了
2021牛客暑期多校训练营4 D-Rebuild Tree(prufer序列+树形dp)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
D-Rebuild Tree
Prufer 是這樣建立的:每次選擇一個編號最小的葉結點并刪掉它,然后在序列中記錄下它連接到的那個結點。重復n?2n-2n?2次后就只剩下兩個結點,算法結束。(為什么不是n?1n-1n?1次呢?因為第n?1n-1n?1次操作序列記錄下的節點一定是nnn)
一個 nnn個點 mmm條邊的帶標號無向圖有 kkk個連通塊。我們希望添加k?1k-1k?1條邊使得整個圖連通。方案數為nk?2?∏i=1ksin^{k-2}·\prod_{i=1}^{k}s_ink?2?i=1∏k?si?
證明考慮組合意義,詳細見 OIWIKIPrufer 序列
- 有了上面結論,刪kkk條邊之后形成k+1k+1k+1個連通塊,設每個連通塊的大小為sis_isi?
?則生成樹個數為nk?1?∏i=1k+1sin^{k-1}·\prod_{i=1}^{k+1}s_ink?1?∏i=1k+1?si?,該題就是求∑split(n,k)nk?1?∏i=1k+1si=nk?1?∑split(n,k)∏i=1k+1si\sum_{\text{split(n,k)}}n^{k-1}·\prod_{i=1}^{k+1}s_i=n^{k-1}·\sum_{\text{split(n,k)}}\prod_{i=1}^{k+1}s_isplit(n,k)∑?nk?1?i=1∏k+1?si?=nk?1?split(n,k)∑?i=1∏k+1?si? - 求∑split(n,k)∏i=1k+1si\sum_{\text{split(n,k)}}\prod_{i=1}^{k+1}s_i∑split(n,k)?∏i=1k+1?si?可以考慮將問題轉化為等價問題:刪掉kkk條邊且在每個聯通塊選一個點的方案數(由于每個連通塊有sis_isi?種選擇即得出∏i=1k+1si\prod_{i=1}^{k+1}s_i∏i=1k+1?si?)。
設計dp:
fu,j,0/1f_{u,j,0/1}fu,j,0/1?表示uuu子樹內,刪了jjj條邊,是否選擇點的方案數。
總結
以上是生活随笔為你收集整理的2021牛客暑期多校训练营4 D-Rebuild Tree(prufer序列+树形dp)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2021牛客暑期多校训练营4 E-Tre
- 下一篇: 李晨家庭资料简介 李晨家庭资料简介详情