博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ.2938.[POI2000]病毒(AC自动机)
阅读量:4970 次
发布时间:2019-06-12

本文共 784 字,大约阅读时间需要 2 分钟。

\(Description\)

给n个模式串,问是否存在长度无限的主串,使得任何一个模式串都没有在主串中出现。

\(Solution\)

先建AC自动机。

假设我们有了一个无限长的安全代码,然后在AC自动机上匹配应该发生什么?
应该是匹配到一个位置失败跳回去,之后要再匹配到这个位置(必须跳回当前链)再失败跳回去。跳回去就是通过fail指针。
Trie树上连上fail指针的边后(其实就是Build时改的son),如果能在这个有向图上找到环,就TAK。
或者,安全代码无限长的话前后要能拼起来,即前后缀相同(同样要跳回当前链),且保证在这过程中不会匹配任何模式串。
前后缀相同就是通过fail指针跳回去(到当前链)。
建图(就是建AC自动机),DFS一遍就可以。注意如果fail[x]匹配,那么x也匹配。
注意访问过的点就没必要再访问了。

这题感觉理解不能,感觉AC自动机在从头开始学。。

//1408kb    72ms#include 
#include
#include
#include
const int N=30005;struct AC_Automaton{ int tot,son[N][2],q[N],fail[N]; bool ed[N],vis[N],ins[N]; char s[N]; void Insert() { scanf("%s",s); int l=strlen(s),x=0; for(int i=0,v; i

转载于:https://www.cnblogs.com/SovietPower/p/9607235.html

你可能感兴趣的文章
Oracle database link
查看>>
清北学堂2017NOIP冬令营入学测试P4749 F’s problem(f)
查看>>
POJ 1840 Eqs HASH
查看>>
python调用shell小技巧
查看>>
TL431的几种常用用法
查看>>
BZOJ 1833: [ZJOI2010]count 数字计数( dp )
查看>>
关于toString()和String()要说几句话
查看>>
bzoj 3751[NOIP2014]解方程
查看>>
CSS(二) 文字样式属性,背景和列表
查看>>
js 经典闭包题目详解
查看>>
在项目中移除CocoaPods
查看>>
面试题三 替换空格
查看>>
LeetCode104.二叉树最大深度
查看>>
linux usb驱动——Gadget代码介绍
查看>>
【洛谷】CYJian的水题大赛【第二弹】解题报告
查看>>
POJ 1703 Find them, Catch them【种类/带权并查集+判断两元素是否在同一集合/不同集合/无法确定+类似食物链】...
查看>>
L1-5. A除以B【一种输出格式错了,务必看清楚输入输出】
查看>>
Git一分钟系列--快速安装git客户端
查看>>
bzoj 3160 万径人踪灭 —— FFT
查看>>
poj3254二进制放牛——状态压缩DP
查看>>