前言
米奇妙妙 \(\rm{dp}\) , 也是高階計數
這種題看得懂想不出, 還是非常難蚌
能不能多想想再去看 \(\rm{TJ}\) 啊
演算法
注意到除了割邊, 其他的邊都沒有影響, 顯然可以縮 \(\rm{e}\)-\(\rm{DCC}\) 再進行處理
這裡發現縮完之後形成一棵樹, 考慮樹形 \(\rm{dp}\)
這裡我有一個誤區, 就是答案必須要是幾個 \(f_x\) 組合到一起, 但是實際上完全不用
對於樹這種特殊結構, \(f_{root}\) 已經包含了所有情況
因此令 \(f_{x, 0/1}\) 表示只在 \(x\) 的子樹之內建造軍營, 軍營的
首先考慮答案式子, 我們注意到, 答案應該是多種情況累加, 因為 \(f_{x, 1}\) 實際上是不重不漏的, 主要需要處理的是那些無關緊要的邊, 我們選擇守或者不守
注意到如果縮完點之後當前子樹的大小為 \(Size_x\) , 我們就有 \(Size_x - 1\) 條割邊要守, 其中子樹外的 \(m - Size_x + 1\) 條邊可以任選
這裡有一個超級巨大的問題: 對於當前節點到父節點的邊, 一定不能選, 因為對於父節點, \(f_{fa, 1}\) 實際上考慮了這條邊, 選上之後會導致重複, 因此記錄答案時不能算這條邊
事實上如果最早就有關於答案式的思路, 可以透過手推樣例/觀察性質發現這種性質, 但是我還是大為震撼
所以答案為
太有實力啦
考慮遞推
首先我們需要知道, 如果對於 \(x\) 的子樹 \(son\) , 其中 \(son\) 內部有軍營, 那麼 \(x \to son\) 這條邊必須要守, 其他無所謂
所以有
初始化
注意這裡表示的是隻選 \(x\) 這一 \(\rm{e}\)-\(\rm{DCC}\) 中點的可能性, 反正可以隨便選, 邊隨便選的情況在計算答案時統計
程式碼
後補
總結
神秘計數方法
\(\rm{dp}\) 式子考慮不到的, 可以在統計答案時考慮
注意計數不重不漏, 注意初始化