亦稱為廣義字尾陣列
lcs=longest common suffix
lcp=longest common preffix sv
s
v表示trie上節點v到根的路徑形成的字串
由於在trie上,自帶去重功能 顯然l
cs(s
u,sv
)=de
plca
(u,v
) lcs
(su,
sv)=
depl
ca(u
,v
)我們要實現字尾陣列的功能,即把sa
,ran
k,h(
heig
ht) sa,
rank
,h(h
eigh
t)
都求出來 sa
,ran
k sa,
rank
很好求,模擬序列情形,倍增,將兩個長度2i
−12 i−
1的資訊雙關鍵字排序得到2i
2
i長度的資訊。這裡,我們只需取出每個點的2i
−12 i−
1級祖先。
其餘部分類似於序列上的做法。
然後我們要茲磁查詢lc
p(su
,sv)
l cp
(su,
sv
)乙個思路是求出hi
h
i,即lc
p(ss
ai−1
,ssa
i)l cp
(ssa
i−1,
ssai
)乙個方法是二分+雜湊,但是有更簡單的做法,我們對倍增過程每個點的ra
nkr an
k保留下來(據說這叫波蘭表),那麼我們可以倍增求任意兩個點的lc
p lcp
,**大概長這樣
int lcp(int u , int v)
return l;
}
然後類似地,使用st表支援rmq即可o(1)詢問任意兩點lcp trie上構建字尾陣列
往事太多,有時候忘了就忘了吧。如果有非記不可的,就只能用點附加手段啦 我們定義一棵往事樹是乙個 n 個點 n 1 條邊的有向無環圖,點編號為 1到 n,其中 1 號點被稱為是根結點,除根結點以外,每個點都恰有一條出邊 即以其作為起點的邊 每條邊上有 1 個字元 這裡我們實際上用乙個不大於 300的非...
trie上構建字尾陣列
往事太多,有時候忘了就忘了吧。如果有非記不可的,就只能用點附加手段啦 我們定義一棵往事樹是乙個 n 個點 n 1 條邊的有向無環圖,點編號為 1到 n,其中 1 號點被稱為是根結點,除根結點以外,每個點都恰有一條出邊 即以其作為起點的邊 每條邊上有 1 個字元 這裡我們實際上用乙個不大於 300的非...
CH601字尾陣列 Trie樹
內含字典樹建立及查詢模板 描述給定n個字串s1,s2.sn,接下來進行m次詢問,每次詢問給定乙個字串t,求s1 sn中有多少個字串是t的字首。輸入字串的總長度不超過10 6,僅包含小寫字母。輸入格式 第一行兩個整數n,m。接下來n行每行乙個字串si。接下來m行每行乙個字串表示詢問。輸出格式 對於每個...