「賽前備戰」NOIp2020-提高 圖論訓練
阿新 • • 發佈:2020-08-04
博主太菜,可能會炸聯賽,於是惡補一下 QAQ
題目比較基礎,動態更新
Tags
生成樹
,最短路
,差分約束
,樹的直徑與重心
,LCA
,樹鏈剖分
,拓撲序
,強連通分量
, 割點
, 橋
, 點雙連通分量
,邊雙連通分量
,2-SAT
,二分圖
,正/負環
,最小環
「Codeforces 888G」Xor-MST
update - 2020.8.4
此題需要用到一個叫 Borůvka 的最小生成樹演算法,大致就是對現在的每一個連通塊都找一遍的最短邊,最後每個連通塊擇優,將這些邊全部連上。這樣複雜度之正確的原因可以參考啟發式合併,\(O(|E|\log |V|)\)。
對於此題,我們以可以用這樣的思路來“擇優合併”,即選取兩個結點 \(u, v\)
對於兩個二進位制數 \(x = (10001010)_2,y = (10000110)_2\),前 \(4\) 位相同,即 \(\text{lcp} = 4\),那麼異或一次前四位都是 \(0\)。我們優先考慮二進位制下 \(\text{lcp}\) 較大的。
和字首有關,於是可以斷定是 01-Trie。轉化到樹上,lcp 就成了兩個葉子的 LCA,那麼我們就該優先考慮 LCA 深度較深的。
遍歷整顆 Trie,找到這些 LCA,然後對於一個 LCA,列舉左兒子值域中的所有數 \(a_i\),然後在右子樹中查詢,並使路徑上的 0/1 值儘量和 \(a_i\)
時間複雜度 \(O(n\log n\log a)\)。