大力建后缀自动机,每个节点代表了(len[i]-len[fa[i]])个串,加起来
对于(parent)树上的某个节点,它代表的所有子串出现过(endpos(i))次
对于长度为(i-1)的子串,它至少出现过(ans[i])次
求出每个节点的(endpos(i)),更新(ans[len[i]]),然后求后缀最大值
(endpos)的求法:只有(np)类节点会贡献额外的(endpos),(nq)类节点只是把原来的节点拆分而已
把所有串拼起来,中间加奇怪的字符,建立后缀自动机
然后(bfs)那个(parent)树,加一个(sum[now])数组表示当前节点内包含了多少个包含奇怪字符的串,更新答案的时候减去
相当于字符环匹配嘛,把每个串延长一倍,然后看看每个长度为(len)的串能不能匹配上
后缀自动机(nxt)指针(DAG)上求(SG)函数(大雾)
然后记得弄一个(sum)数组表示(sg)值为(i)的节点一共有多少个,然后就是对两个串(dfs)求出符合要求的串,代码有点毒瘤