【Moban】后缀自动机(SAM)模板

在学会后缀自动机之前,要学会熟练掌握WA自动机,TLE自动机,RE自动机以及各种爆0的技巧。  
int push(int val)
{
	mx[++tot] = val;
	return tot;
}
void extend(int t)
{
	int np,nq,p,q;
	np = push(mx[las]+1);
	for(p=las;p&&(!son[p][t]);p=par[p]) son[p][t]=np;
	if(!p) par[np] = rt;
	else
	{
		q = son[p][t];
		if(mx[p]+1==mx[q])
		{
			par[np] = q;
		}
		else
		{
			nq = push(mx[p]+1);
			memcpy(son[nq],son[q],sizeof(son[q]));
			par[nq] = par[q]; par[q] = par[np] = nq;
			for(;p&&son[p][t]==q;p=par[p]) son[p][t] = nq;
		}
	}
	las = np;
}
 
posted @ 2018-05-23 12:09  Newuser233  阅读(8)  评论(0)    收藏  举报