bzoj2938(ac自动机)
刚学了ac自动机,去hzwer上找了道练习题;
串是安全的就说明ac自动机不会找到匹配,考虑ac自动机的匹配过程;
我们把val等于1的点删掉和fail指针指向被删掉的点删掉;
如果剩下的图有环,就有解;
#include<iostream> #include<cstring> #include<cstdio> #include<cmath> #include<algorithm> using namespace std; const int maxn=30010; int tot,vis1[maxn],vis2[maxn],q[maxn],head,tail,in[maxn]; struct node{int son[2],f,cnt,v; }ch[maxn]; char s[maxn]; void add(char s[]){int u=0,len;len=strlen(s);for(int i=0;i<len;++i){int c=s[i]-'0';if(!ch[u].son[c]){ch[u].son[c]=++tot;}u=ch[u].son[c];}ch[u].v=1;vis1[u]=1; } void pre(){head=tail=0;ch[0].f=0;for(int i=0;i<2;++i){if(ch[0].son[i])q[++tail]=ch[0].son[i];}while(head<tail){int now=q[++head];for(int i=0;i<2;++i){int u=ch[now].son[i];if(!u){ch[now].son[i]=ch[ch[now].f].son[i];continue;}int v=ch[now].f;while(v&&!ch[v].son[i])v=ch[v].f;ch[u].f=ch[v].son[i];vis1[u]|=vis1[ch[v].son[i]];q[++tail]=u;}} } bool dfs(int x){in[x]=1;for(int i=0;i<2;++i){int v=ch[x].son[i];if(in[v])return 1;if(vis1[v]||vis2[v])continue;vis2[v]=1;if(dfs(v))return 1;}in[x]=0;return 0; } int n; int main(){scanf("%d",&n);for(int i=1;i<=n;++i){scanf("%s",s);add(s);}pre();if(dfs(0))puts("TAK");else puts("NIE");system("pause");return 0; }
转载于:https://www.cnblogs.com/dibaotianxing/p/7966891.html
bzoj2938(ac自动机)相关推荐
- BZOJ2938: [Poi2000]病毒(AC自动机)
Orz wlp 5min讲完后缀数组 题意 给出$n$个0, 1串 问是否可以构造出一个无限长的字符串使其不包含任意串 Sol 刚开始我试图假装自己不知道这是个AC自动机的题然后来做.发现根本不可能q ...
- 【BZOJ2938】病毒,AC自动机练习
传送门(权限题) 2938: [Poi2000]病毒 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 462 Solved: 240 [Submit][S ...
- BZOJ2938[Poi2000]病毒——AC自动机
题目描述 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已经找出了所有的病毒代码段,试问,是否 ...
- 提高篇 第二部分 字符串算法 第4章 AC自动机
https://blog.csdn.net/wangyh1008/article/details/81428056 [模板]AC自动机(加强版) 洛谷3796 AC自动机_A_loud_name-CS ...
- Aho-Corasick 多模式匹配算法(AC自动机) 的算法详解及具体实现
多模式匹配 多模式匹配就是有多个模式串P1,P2,P3-,Pm,求出所有这些模式串在连续文本T1-.n中的所有可能出现的位置. 例如:求出模式集合{"nihao","ha ...
- 【BZOJ2434】[NOI2011]阿狸的打字机 AC自动机+DFS序+树状数组
[BZOJ2434][NOI2011]阿狸的打字机 Description 阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机.打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P ...
- AC自动机算法及模板
AC自动机算法及模板 2016-05-08 18:58 226人阅读 评论(0) 收藏 举报 分类: AC自动机(1) 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 关于 ...
- Keywords Search AC自动机QAQ
AC自动机,一直以来都以为是一个非常高大上的算法,其实它还真的挺高大上的. 首先来说,ac自动机的思想与kmp类似,需要自己模拟来理解. 给两个博客: http://www.cppblog.com/m ...
- 字符串匹配算法 -- AC自动机 基于Trie树的高效的敏感词过滤算法
文章目录 1. 算法背景 2. AC自动机实现原理 2.1 构建失败指针 2.2 依赖失败指针过滤敏感词 3. 复杂度及完整代码 1. 算法背景 之前介绍过单模式串匹配的高效算法:BM和KMP 以及 ...
最新文章
- 软件测试需要什么样的思维,你知道软件测试的核心价值是什么吗?为什么我们需要软件测试?...
- weed mount 之后出现文件删除不掉
- Android启动外部程序
- oracle数据库实例,数据库的理解
- Sargable 与 谓语下推 (predicate pushdown) 简介
- NVIDIA显卡Linux驱动180.44正式版
- 5.UNIX 环境高级编程--标准I/O库
- 微星小飞机界面翻译_/|黑科技高效快捷的多引擎翻译软件
- SwitchHost常见问题解决
- 华为HG8120C光猫获取超级管理员密码(2021-12-12亲测)
- DigestUtils.md5Hex加密
- python画平行四边形_利用transform skewX制作平行四边形导航菜单
- 在react中使用swiper/react
- Linux学习-man和Info
- Google Earth Engine(GEE)——MODIS 影像LST地表温度随时间变化的趋势案例分析
- linux gcc getch,模拟实现getch()
- 机器学习在美团配送系统的实践:用技术还原真实世界-笔记
- 【RISC-V】SiFive Unmatched开发板开发手记02
- 174. 地下城游戏;剑指 Offer 40. 最小的k个数;378. 有序矩阵中第K小的元素;703. 数据流中的第K大元素
- python 验证码字符分割