字尾自動機做題技巧
阿新 • • 發佈:2020-09-19
字尾自動機做題技巧
①字尾自動機的總狀態數小於\(2n\),總轉移邊數小於\(3n\)
②字尾自動機沿著 link 連結跳的總複雜度為\(O(n)\),構造字尾自動機的總複雜度也是\(O(n)\)
性質:
①插入字元新增子串數:len[p]-len[link[p]]
②字尾連結:link[p]
表示的字串是p
的字尾
③沿著轉移陣列走,可以得到母串的所有子串。
④沿著字尾連結走,一直得到的是當前點的字尾串。
⑤如果把非clone點的cnt[i]
值置為1,然後沿著字尾連結的反向邊 dfs 一遍,把其子節點的貢獻都加到自己身上,最後得到的cnt[i]
就是 i 這個節點所表示的串在母串中出現的總次數。因為子節點的結束下標肯定是跟 i 不同的(除了clone節點),而 i 所表示的字串是子節點表示字串的子串,所以把貢獻加以來就可以了。
⑥求第 i 個節點所表示串的出現個數(本質相同,位置不同也可):先將所有非克隆節點的cnt[i]
置為1,然後在後綴樹上跑 dfs ,把 i 的子樹的貢獻加到自己身上即可。
⑦求第 i 個節點所表示串的出現個數(本質相同,位置不同算一個串):將所有(包括克隆節點)的cnt[i]
置為1即可。