关于AC自动机的一个粗暴优化
查看原帖
关于AC自动机的一个粗暴优化
272945
asdfo123楼主2020/11/29 16:26

RT,这道题如果用暴力跳fail指针的方法是肯定会被卡掉的

然而蒟蒻的我用了一个粗暴的路径压缩,如这样:

for(int i = 0; i < 26; i++) {
	int v = t[u][i];
	if(v) {
		fail[v] = t[fail[u]][i];
		lst[v] = end[fail[v]]?fail[v]:lst[fail[v]];
		q.push(v);
	} else t[u][i] = t[fail[u]][i];
}

然后跳的时候直接这样:

for(int t = u; t; t = lst[t]) ans[end[t]]++;

居然直接过了这道题,在其他AC自动机的题居然有的比用fail树的方法更快

请问各位这个容易被卡吗?能证明复杂度吗?

附上评测记录:

评测记录

2020/11/29 16:26
加载中...