題解 九省聯考 2018 秘密襲擊 coat

2022-09-09 22:21:36 字數 670 閱讀 3784

可以將危險程度轉化為:列舉權值 \(t\in[1,w]\),如果某個連通塊權值不小於 \(t\) 的節點個數不小於 \(k\) 個那麼造成 \(1\) 的貢獻。

考慮 dp:令 \(f_\) 表示以 \(u\) 為根子樹中包含 \(u\) 的連通塊,有 \(j\) 個權值不小於 \(i\) 的節點的方案數。轉移就是前兩維列舉,第三維做揹包。

不妨令 \(f_(z)=\sum\limits_z^jf_\),最終要求的就是 \(\sum\limits_[z^j]\sum\limits_f_(z)\),轉移是 \(f_(z)=z^\prod\limits_f_(z)\) 。考慮維護點值處理,需要維護的位置是一樣的,只需要在外層 newton 插值,內層的轉移反而會方便很多。此時在外層列舉 \(t\),裡面需要維護的就是 \(f_(t)\),轉移就是子樹對位乘然後考慮一下 \(u\) 本身帶來的乙個字首乘。最後求出 \(\sum\limits_f_(t)\) 後暴力 \(o(n^2)\) 插係數即可。

接著就是考慮內層怎麼做這個對位相乘。注意到 \(f_(t)\) 會被分成若干段,事實上,段數和葉子個數相關。考慮啟發式合併,具體實現可以考慮線段樹合併,在每個結點處維護權值相等的標記即可。

又是乙個轉化為維護點值的套路題 >_< 。

**:評測記錄 - 洛谷 | 電腦科學教育新生態 (luogu.com.cn)

九省聯考 2018 秘密襲擊

題意 給定一顆含 n 個結點的樹,每個點有點權 d i 求所有聯通塊中第 k 大之和。1 leq n,m,k leq 1666,1 leq d i leq m 時間限制 5 秒。題解一道很有趣的題目。做法簡述 由於 dp 為卷積形式對其多項式求點值,並通過類似整體 dp 的方式維護變換,再通過拉格朗...

九省聯考 秘密襲擊

剛開始看起來像樹形dp,卻感覺無從下手 其實正解是fft 每個值的排名往上回溯時都會改變,後效性滿滿的。根本不是一次樹形dp能解決的。那麼,每個值對其他值的排名有什麼影響呢?我們發現只有比val i 大的值才會影響它的排名。不妨每次取乙個點出來,令值大於改點的值變為1,小於改點的值變為0,問題就轉化...

loj 2473 九省聯考 2018 秘密襲擊

給出一棵樹,每個節點有乙個權值。問所有連通塊中第k大元素的和模64123。設最權值為w,n 1666,w 1666 這一題正解有那麼長!標程也是有那麼長!肝了好久肝不動果斷轉暴力 include using namespace std const int n 1710,mod 64123 int i...