后缀自动机刷题小结

hihocoder后缀自动机二

大力建后缀自动机,每个节点代表了\(len[i]-len[fa[i]]\)个串,加起来

hihocoder后缀自动机三

对于\(parent\)树上的某个节点,它代表的所有子串出现过\(endpos(i)\)

对于长度为\(i-1\)的子串,它至少出现过\(ans[i]\)

求出每个节点的\(endpos(i)\),更新\(ans[len[i]]\),然后求后缀最大值

\(endpos\)的求法:只有\(np\)类节点会贡献额外的\(endpos\)\(nq\)类节点只是把原来的节点拆分而已

hihocoder后缀自动机四

把所有串拼起来,中间加奇怪的字符,建立后缀自动机

然后\(bfs\)那个\(parent\)树,加一个\(sum[now]\)数组表示当前节点内包含了多少个包含奇怪字符的串,更新答案的时候减去

hihocoder后缀自动机五

相当于字符环匹配嘛,把每个串延长一倍,然后看看每个长度为\(len\)的串能不能匹配上

hihocoder后缀自动机六

后缀自动机\(nxt\)指针\(DAG\)上求\(SG\)函数(大雾)

然后记得弄一个\(sum\)数组表示\(sg\)值为\(i\)的节点一共有多少个,然后就是对两个串\(dfs\)求出符合要求的串,代码有点毒瘤

猜你喜欢

转载自www.cnblogs.com/knife-rose/p/12346454.html