Trick 總結和其他問題總結另開一篇文章,這裡只是記錄做法。
6.25
\(0+100+0\),rk 倒數。
這場比較好的就是考場上切掉了 T2,但是反而沒有切掉 T1
事實上後面想了一下 T1 大概也會了,好像是人均題……
T1 零個題 (tree)
設樹上共 \(x\) 個葉子,用 \(\frac{x}{2}\) 條路徑將葉子兩兩相連,要求樹上每條邊都被覆蓋過,求路徑長度和的最小值。
多次詢問,每次在原樹上新掛一些葉子節點,總和小於 \(10^5\)。
Solution: P6805 [CEOI2020] 春季大掃除
先研究靜態問題,搞出一個合法連線方案,使用 P7320 「PMOI-4」可憐的團主 中 dfs 序 \(i\) 連 \(i+frac{n}{2}\) Trick 即可。
然後發現每條邊如果覆蓋次數 \(\ge3\) 就可以重新安排來 \(-2\)。
然後就發現一條邊被覆蓋 \(1~2\) 次,而且 \(2\) 次當且僅當子樹內葉子數量為偶數。
這是好維護的。
好的現在,新掛一個節點,如果掛在葉子上則沒什麼影響,否則則會讓該點到根(注意根是重新選擇的,度數必須 \(>1\))每個點新增一個葉子節點。
變成路徑異或,全域性求和。
樹剖維護 \(O(n\log ^2n)\) 即可,注意每次詢問後還原。
T2 一個題 (ynoi)
維護一個可重集,元素數量 \(\le 2\times 10^5\),元素值域 \([0,2^{30}-1]\)。
支援加入,刪除和有引數 \(k\) 詢問:
將可重集劃分為 \(k\) 個非空子集,每個子集權值為內所有元素按位與結果,劃分權值為所有子集權值和,找到最大權值劃分。
Solution:
先考慮 \(k=2\),此時按位貪心顯然對,考慮每一位,如果全 \(0\) 或 \(1\),平凡。
如果有 \(0\) 和 \(1\),這一位貢獻答案,當且僅當所有這一位為 \(0\) 的放在一起。
然後貪心的,它們必須放一起,故直接合併成一個數扔進去並直接加貢獻。
這個過程使用 0-1 Trie
維護子樹按位與結果即可 \(o(n\log^2 n)\) 快速計算。
現在 \(k>2\),發現按位貪心仍然正確,使用調整法可證明。
然後 0-1 Trie
仍然可以維護。
具體的,如果這一位為 \(1\) 的 \(\ge k\) 個仍然可以將全部這一位為 \(0\) 的合併扔進去;如果 \(<k\) 個,一個個單選最優,遞迴求解剩下的問題即可。
然後新維護一下子樹和就行了。