码迷,mamicode.com
首页 > 其他好文 > 详细

后缀自动机(SAM)模板

时间:2016-02-22 20:54:34      阅读:336      评论:0      收藏:0      [点我收藏+]

标签:

 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)模板

标签:

原文地址:http://www.cnblogs.com/TenderRun/p/5208074.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!