刚学了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自动机)相关推荐

  1. BZOJ2938: [Poi2000]病毒(AC自动机)

    Orz wlp 5min讲完后缀数组 题意 给出$n$个0, 1串 问是否可以构造出一个无限长的字符串使其不包含任意串 Sol 刚开始我试图假装自己不知道这是个AC自动机的题然后来做.发现根本不可能q ...

  2. 【BZOJ2938】病毒,AC自动机练习

    传送门(权限题) 2938: [Poi2000]病毒 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 462 Solved: 240 [Submit][S ...

  3. BZOJ2938[Poi2000]病毒——AC自动机

    题目描述 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已经找出了所有的病毒代码段,试问,是否 ...

  4. 提高篇 第二部分 字符串算法 第4章 AC自动机

    https://blog.csdn.net/wangyh1008/article/details/81428056 [模板]AC自动机(加强版) 洛谷3796 AC自动机_A_loud_name-CS ...

  5. Aho-Corasick 多模式匹配算法(AC自动机) 的算法详解及具体实现

    多模式匹配 多模式匹配就是有多个模式串P1,P2,P3-,Pm,求出所有这些模式串在连续文本T1-.n中的所有可能出现的位置. 例如:求出模式集合{"nihao","ha ...

  6. 【BZOJ2434】[NOI2011]阿狸的打字机 AC自动机+DFS序+树状数组

    [BZOJ2434][NOI2011]阿狸的打字机 Description 阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机.打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P ...

  7. AC自动机算法及模板

    AC自动机算法及模板 2016-05-08 18:58 226人阅读 评论(0) 收藏 举报  分类: AC自动机(1)  版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 关于 ...

  8. Keywords Search AC自动机QAQ

    AC自动机,一直以来都以为是一个非常高大上的算法,其实它还真的挺高大上的. 首先来说,ac自动机的思想与kmp类似,需要自己模拟来理解. 给两个博客: http://www.cppblog.com/m ...

  9. 字符串匹配算法 -- AC自动机 基于Trie树的高效的敏感词过滤算法

    文章目录 1. 算法背景 2. AC自动机实现原理 2.1 构建失败指针 2.2 依赖失败指针过滤敏感词 3. 复杂度及完整代码 1. 算法背景 之前介绍过单模式串匹配的高效算法:BM和KMP 以及 ...

最新文章

  1. 软件测试需要什么样的思维,你知道软件测试的核心价值是什么吗?为什么我们需要软件测试?...
  2. weed mount 之后出现文件删除不掉
  3. Android启动外部程序
  4. oracle数据库实例,数据库的理解
  5. Sargable 与 谓语下推 (predicate pushdown) 简介
  6. NVIDIA显卡Linux驱动180.44正式版
  7. 5.UNIX 环境高级编程--标准I/O库
  8. 微星小飞机界面翻译_/|黑科技高效快捷的多引擎翻译软件
  9. SwitchHost常见问题解决
  10. 华为HG8120C光猫获取超级管理员密码(2021-12-12亲测)
  11. DigestUtils.md5Hex加密
  12. python画平行四边形_利用transform skewX制作平行四边形导航菜单
  13. 在react中使用swiper/react
  14. Linux学习-man和Info
  15. Google Earth Engine(GEE)——MODIS 影像LST地表温度随时间变化的趋势案例分析
  16. linux gcc getch,模拟实现getch()
  17. 机器学习在美团配送系统的实践:用技术还原真实世界-笔记
  18. 【RISC-V】SiFive Unmatched开发板开发手记02
  19. 174. 地下城游戏;剑指 Offer 40. 最小的k个数;378. 有序矩阵中第K小的元素;703. 数据流中的第K大元素
  20. python 验证码字符分割

热门文章

  1. docker暴露多个端口
  2. 几张图片总结我的2015年
  3. ++和+的运算优先级和++i和i++混合用法解析
  4. 【并发编程】Future模式及JDK中的实现
  5. Spring Cloud 学习二(Eureka)
  6. Web Components 简述
  7. cassandra java driver
  8. MySQL事物系列:1:事物简介
  9. CSRF(Cross-site request forgery)跨站请求伪造
  10. Kali Linux 64位安装WPS