字尾樹簡短實現

2022-04-30 07:09:09 字數 834 閱讀 7722

也沒什麼好講的,背下來也沒什麼問題。

不過理解更好吧。

對應洛谷字尾自動機的模板題

雖然字尾樹很強,但是請注意:

常數還是有的(而且比較大。。。。,估計是唯一不如字尾自動機的地方)

節點數很難超過1.5*n,考場上可以試試卡卡空間什麼的

#include #include 

#define sid 2000500

#define inf 100000000

#define ri register int

#define ll long long

using

namespace

std;

template

inline

void upmax(re &a, re b)

char s[1000050

];struct

p t[sid];

int cnt = 1, act = 1

, rem, n;

ll ans;

int node(int l, int

len)

void attend(int

i)

else

(act == 1) ? rem -- : act =t[act].link;

}}int

has[sid];

void dfs(int e, int

dep)

if(has[e] >= 2) upmax(ans, 1ll * has[e] *dep);

}int

main()

字尾樹的實現

第一次遇到字尾樹這種資料結構,所以就去理解了一下,感覺原理不難懂,但是相比於字首樹,字尾樹的 實現還是有點麻煩。字尾樹常用於在母串s中查詢子串p是否存在,並查詢子串在母串中開始的位置 它的思路就是對於每個字尾樹結點,都有乙個map和vector 給乙個例子 字尾樹的實現 class suffixtr...

字尾樹 字尾陣列

在字串處理當中,字尾樹和字尾陣列都是非常有力的工具,其中字尾樹大家了解得比較多,關於字尾陣列則很少見於國內的資料。其實字尾陣列是字尾樹的乙個非 常精巧的替代品,它比字尾樹容易程式設計實現,能夠實現字尾樹的很多功能而時間複雜度也不太遜色,並且,它比字尾樹所占用的空間小很多。可以說,在資訊學競賽 中字尾...

字尾樹 字尾陣列

我們考慮將乙個串的所有字尾插入乙個trie中,得到的trie就是字尾trie。我們可以發現,樹上有分叉或者是字尾節點的點的個數是o l en o len o len 個,這個後面解釋,於是把沒有分支並且不是字尾節點的點壓縮到一起,就變成了字尾樹。不難發現,字尾樹可以表示該字串的所有子串。下面分析一下...