字首的最長公共字尾就是兩個長度在sam上對應的節點的lca的len,所以可以對於每個lca考慮。
在每個lca處考慮當前長度的貢獻,發現最優秀的解一定發生在兩個相鄰的下標之間。
所以直接啟發式合併,然後離線處理詢問就行了。
可以發現題目中對於點的要求就是重心。
也就是說,乙個點不能有大小大於$n/2$的子樹,可以發現這樣的子樹一定在重心方向。
然後可以發現,刪掉這個點到重心路徑上的點一定是無效的,因為剩餘子樹大小仍然大於$n/2$。
所以刪掉的邊只可能是重心周圍的邊,那麼只要貪心選取大小最大的子樹即可。
可以發現對於環中的點只要確定乙個點就可以確定剩餘所有點。
所以只要找到所有環對於每個環定向就行了。
然而直接跑會死。考慮對於大小為2的環,最優解顯然是左括號在前,所以最小環的大小是4,總複雜度就合法了。
省選模擬48
首先翻轉串,然後就是喜聞樂見的字尾lcp問題 莫隊很好寫,用set動態維護下排名序列,由於帶log,我只拿了50。正解考慮sam,答案為 l,r 在樹上結點中點對lca的len最大值。離線詢問,對串做掃瞄線,每次處理i,parent樹上編號同字首編號,那麼i點和前面所有點形成的貢獻在祖先鏈上。對結點...
省選模擬48 題解
問題是區間內最大的點對 lcs 容易發現 lcs 其實就是兩個字首的終止節點的 lca 的 len 考慮對每個 sam 上節點搞乙個 set 維護 endpos 集合。每次的操作就是合併兩個集合,然後節點 x 上 endpos 集合中兩兩可以形成 lcs geq len x 容易發現有一些點對是沒有...
省選模擬 19 09 11
ps.博主趁資訊課摸魚考的暴零模擬 看門人憑感覺就知道是長鏈剖分,將路徑查分一下,dis u di sv 2 dis lc adis u dis v 2 dis disu disv 2 disl ca 維護fu,if fu,i 表示u的子樹,深度為 i 的點的 dis disdi s最大值 考慮如何...