題目傳送門
分析:最暴力的做法,a向可以控制的b連邊,b向以它為字首的a連邊
然後拓撲排序求一條路徑的最大值
複雜度\(o(n^2)\)
明顯要優化連邊,這裡給出兩種解法:
sam優化建邊:
這裡要字首關係,我們反向建sam將其變成字尾關係
對於每個串\([l,r]\),我們先找到\(r\)結尾的字首在sam上的位置,通過parent樹上倍增找到\([l,r]\)所在的endpos集合的點
對於每個parent樹上的點,維護乙個vector,儲存在這個點上的a和b
同乙個點上的a和b,先按len為關鍵字從小到大排序,再將b優先放前面,a優先放後面
每個點向它子串集合中最短的連邊,b向比他長的並且比下乙個b短的a連邊,parent樹父親集合中最長的串向兒子連邊
再把控制關係連上去
然後直接跑拓撲排序,時空複雜度都會從\(o(n^2)\)變成\(o(n)\)
寫起來細節挺多的有點噁心
字尾陣列+主席樹優化建邊:
我們先用原串跑一次字尾陣列
b是a的字首只需要\(min_^height[i]\geq len[b]\)
我們對於每個b,滿足上述關係的一定是乙個包含\(lb\)的區間
這個可以二分+\(o(1)\)rmq解決
然後線段樹優化建邊?不行
發現a的長度如果小於b就會出現問題
那就用主席樹
把子串長度從大到小排序,乙個乙個加入再優化建邊就可以了
然後把控制關係也加進去
跑拓撲排序,但是時空複雜度都是\(o(nlogn)\),很卡常
**是第一種做法的:
(字尾陣列是個好東西,我有頭髮的時候天天寫)
十二省聯考 貳 壹玖
之前大假期集訓的時候好像做過,但是已經忘了,可能是水過去的 做之前建議先做一下noi2010超級鋼琴,跟這道題的思路是一樣的 要求的是這若干個區間貢獻的前 k 大,不妨列舉每乙個左端點,用 rmq 超級鋼琴 或者可持久化 01trie 異或粽子 維護出貢獻最大的右端點,放到乙個大根堆裡,堆裡每個元素...
LOJ3048 十二省聯考 2019 異或粽子
小粽是乙個喜歡吃粽子的好孩子。今天她在家裡自己做起了粽子。小粽面前有 n 種互不相同的粽子餡兒,小粽將它們擺放為了一排,並從左至右編號為 1 到 n 第 i 種餡兒具有乙個非負整數的屬性值 a i 每種餡兒的數量都足夠多,即小粽不會因為缺少原料而做不出想要的粽子。小粽準備用這些餡兒來做出 k 個粽子...
十二省聯考2019 遊記
在機房呆了一天,大概看了看原先寫過的題,有點頹。下午的時候和大家一起打掃了一下機房。走的時候,看著空無一字的黑板,風吹起的棕黃色窗簾,遠方的藍色天空,有一種很濃厚的哀傷。時間過得真快啊,轉眼就是省選了呢。許是要退役了吧?許是要退役了吧。下午去試機了,感覺鍵盤不太星啊。考場倒是換了乙個地方 但是不讓我...