題解 yww 與樹上的回文串

2022-05-19 01:54:51 字數 689 閱讀 8586

題目鏈結

題意複述:給一棵樹,每條邊上有乙個字元(\(0\)或\(1\)),求有多少對 \((x,y)(x,滿足 \(x\) 到 \(y\) 路徑上的邊上的字元按順序組成的字串為回文串。

又一道神仙題啊

用其它方法並不能方便地求出答案,考慮點分。

經過乙個點的回文串只有兩種情況:

先找出以重心為開頭的所有路徑所表示的字串,考慮第一種情況:可以建一顆字典樹,查詢表示每個字串的路徑的數量,就可以算出終點不同且表示相同串的路徑數。

再來考慮第二種情況:即長串的後半段與短串匹配。由於有多個串要匹配,就可以建立ac自動機,根據定義可得短串的終點在fail樹上是長串的祖先。

根據broder理論

乙個回文串的所有回文字首可以被表示為\(o(\log n)\)個等差數列

可以記錄下長串在trie樹上的所有回文字首所構成的等差數列,再在fail樹上dfs,用陣列記錄當前訪問節點的祖先中每種長度的串的數量,根據等差數列計數的套路,用\(\sqrt\)個長度為\(\sqrt\)的陣列來記錄公差\(\leqslant \sqrt\)的情況,同時記錄下所有長度,就可以做到\(o(\sqrt)\)修改與查詢。

求回文字首可以有trie樹上父親的狀態轉移而來,判乙個串是否為回文串可以用字串雜湊。膜數不選好,爆0兩行淚

**太醜不貼了……

回文串的題解

給定乙個由 a z 和 組成的字串,其中 可以被替代成任何 a z 中的字元。詢問將 替換後字典序最小的回文字串,無解輸出 1。尺取好啊!從 2 22 邊往中間掃。include using namespace std typedef long long ll template typename t...

樹上的回文

羅馬種了一棵樹,樹上有n個點。每個點有乙個小寫英文本母。1號點是樹的根,剩下的n 1個點都有乙個父親。點和父親之間通過乙個邊相連。第i個點的父親是pi,且pi乙個點的深度是從根到當前點的路徑上經過的點數。根的深度是1。u在v的子樹中,當且僅當u往根方向走可以到達v。特別的,v也是在v的子樹中。羅馬給...

最短回文串 題解

最短回文串 palindrome.pas c cpp 如果乙個字串正過來讀和倒過來讀是一樣的,那麼這個字串就被稱作回文串。例如abcdcba,abcddbca就是回文串,而abcdabcd不是。你要解決的問題是 對於任意乙個字串,輸出將這個字串變為回文串需要插入的最少字元個數,比如,ab3bd只需要...