题目描述:
解析:做了这个题对AC自动机有了更深的理解。先建立补全的AC自动机,发现如果有无限长的串使得任意一个原串都不在这个串中,一定满足这个补全的AC自动机在不经过叶子结点的情况下有环。简略证明一下:发现一个点跳fail的过程的实质即为在一个字符串后面增加一个字符,如果在不经过叶子结点的情况下有环,说明这个串可以无限延伸。怎么在图中判环呢?可以从原点开始dfs,建立两个标记数组,一个用来标记走没走过,走过的点不能再次走,否则会出现死循环。一个用来标记是否在栈中,如果重复出现在栈中则说明有换,回溯的时候记得要把标记清空。
细节:1.这个补全的图中可以有自环,循环节为0或1。2.叶子结点的标记要下传。3.不要在某谷交,数据很水。
附上代码:
