后缀自动机(SAM)模板

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了后缀自动机(SAM)模板相关的知识,希望对你有一定的参考价值。

 1 struct SAM{
 2     int ch[maxn][26],fa[maxn],len[maxn],cnt,last;
 3     void Init()
 4     {
 5         memset(ch,0,sizeof(ch));
 6         memset(fa,0,sizeof(fa));
 7         last=cnt=1;
 8     }
 9     void Add(int c)
10     {
11         int p=last,np=last=++cnt;
12         len[np]=len[p]+1;
13         while(!ch[p][c]&&p){
14             ch[p][c]=np;p=fa[p];
15         }
16         if(p==0)
17             fa[np]=1;
18         else{
19             int q=ch[p][c];
20             if(len[p]==len[q]-1){
21                 fa[np]=q;
22             }
23             else{
24                 int nq=++cnt;len[nq]=len[p]+1;
25                 memcpy(ch[nq],ch[q],sizeof(ch[q]));
26                 fa[nq]=fa[q];fa[q]=fa[np]=nq;
27                 while(ch[p][c]==q&&p){
28                     ch[p][c]=nq;
29                     p=fa[p];
30                 }
31             }
32         }
33     }
34 };

 

以上是关于后缀自动机(SAM)模板的主要内容,如果未能解决你的问题,请参考以下文章

模板后缀自动机 (SAM)

后缀自动机(SAM)模板

109 后缀自动机(SAM)

后缀自动机 模板

模板后缀自动机

[模板]后缀自动机