省選模擬11 題解

2022-03-16 18:57:36 字數 622 閱讀 4343

還沒想明白如何做,待補。

因為原圖為trie樹,樹上兩個點的lcp長度等於兩個點的lca深度。

考慮通過廣義sam來維護兩個點的lcs。

樹上同時對應著乙個$endpos$,樹上兩個點對應的$endpos$對應的廣義sam上節點在字尾樹的lca的$len$即為兩個點的lcs長度。

所以對於原樹上每個點,我們只關注它的子樹在字尾樹上能形成的$len$最大的lca。

樹上$n$個點形成的lca集合,實際上等於dfs序上相鄰的兩點形成的lca集合。

所以用線段樹合併/啟發式合併set都可以解決這個問題。

題中給出的比較方式為一種偏序,也就是說該比較方式是具有傳遞性的。

由於只涉及到在父親位置加點的操作,可以發現新加點不會影響原集合的排名。

所以可以通過中序遍歷為排名遍歷的平衡樹,查詢排名確定大小關係。

考慮新插入乙個點,按照往常的思路在平衡樹上二分是不可行的。

因為我們確定排名的方式是比較兒子,而兒子也在平衡樹上,較難處理。

另乙個思路是直接二分插入位置,將第$k$大的節點抽離出來。

通過splay標號與原序列標號的一致,可以直接對要比較的子節點執行splay操作,查詢排名確定大小關係。

乙個處理相等的方法是使用並查集維護。

省選模擬104 題解

a.簽到題 把每個點向它右側比他大的第乙個點之間連邊,如果沒有那麼向 root 連邊。那麼可以構成一棵樹。特判一些情況之後,可以認為問題就是 1.給某節點和它的所有兒子節點權值加上乙個值。2.詢問一條路徑的權值和。首先考慮如果只詢問單點的維護方法,其實就是打乙個標記表示給整個兒子集合都加上了若干權值...

省選模擬102 題解

a.island 對於正負不同的情況,o n 列舉左側的位置然後計算。對於正負性相同的情況,把笛卡爾樹建出來,然後每次考慮跨過最小值的貢獻。分幾種情況 左右均不超過最小值,左右僅有乙個超過最小值,左右都超過最小值。然後順便統計上其中乙個端點為劃分點的貢獻。然後瘋狂的寫式子拆式子就沒了。做法挺簡單的,...

省選模擬101 題解

a.石子遊戲 問題可以簡單轉化為最少能取出多少個數,使得異或和為 k 顯然答案是小於 log a i 的,因為線性基已經可以拼出所有數了。所以可以考慮列舉這個答案,然後就是 dp 表示用 i 個數能否拼出 j 轉移可以用 fwt 優化,暴力做就是兩個 log 的,因為只需要一項所以手動 ifwt 可...