刚学了ac自动机,去hzwer上找了道练习题;

串是安全的就说明ac自动机不会找到匹配,考虑ac自动机的匹配过程;

我们把val等于1的点删掉和fail指针指向被删掉的点删掉;

如果剩下的图有环,就有解;

#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
const int maxn=;
int tot,vis1[maxn],vis2[maxn],q[maxn],head,tail,in[maxn];
struct node{
int son[],f,cnt,v;
}ch[maxn];
char s[maxn];
void add(char s[]){
int u=,len;
len=strlen(s);
for(int i=;i<len;++i){
int c=s[i]-'';
if(!ch[u].son[c]){ch[u].son[c]=++tot;}
u=ch[u].son[c];
}
ch[u].v=;
vis1[u]=;
}
void pre(){
head=tail=;
ch[].f=;
for(int i=;i<;++i){
if(ch[].son[i])q[++tail]=ch[].son[i];
}
while(head<tail){
int now=q[++head];
for(int i=;i<;++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]=;
for(int i=;i<;++i){
int v=ch[x].son[i];
if(in[v])return ;
if(vis1[v]||vis2[v])continue;
vis2[v]=;
if(dfs(v))return ;
}
in[x]=;
return ;
}
int n;
int main(){
scanf("%d",&n);
for(int i=;i<=n;++i){
scanf("%s",s);
add(s);
}
pre();
if(dfs())puts("TAK");
else puts("NIE");
system("pause");
return ;
}

bzoj2938(ac自动机)的更多相关文章

  1. bzoj2938 AC自动机 + 拓扑排序找环

    https://www.lydsy.com/JudgeOnline/problem.php?id=2938 题意:给出N个01病毒序列,询问是否存在一个无限长的串不存在病毒序列 正常来说,想要寻找一个 ...

  2. 【BZOJ2938】[Poi2000]病毒 AC自动机+DFS

    [BZOJ2938][Poi2000]病毒 Description 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码 ...

  3. LG2444/BZOJ2938 「POI2000」病毒 AC自动机

    问题描述 LG2444 BZOJ2938 I \(\mathrm{AC}\)自动机 \(\mathrm{AC}\)自动机是一种多模式串匹配算法,本萌新今天刚学了它qwq 约定在构造\(\mathrm{ ...

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

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

  5. BZOJ2938:[POI2000]病毒(AC自动机)

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

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

    2938: [Poi2000]病毒 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 1678  Solved: 849[Submit][Status][D ...

  7. 【bzoj2938】[Poi2000]病毒 AC自动机

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

  8. [BZOJ2938]病毒 (AC自动机+dfs)

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

  9. 基于trie树做一个ac自动机

    基于trie树做一个ac自动机 #!/usr/bin/python # -*- coding: utf-8 -*- class Node: def __init__(self): self.value ...

随机推荐

  1. js验证前后密码是否一致,为什么当我输入不一致密码时,不会弹出警告啊

    <form name="form" action="#"><input type="password" id=" ...

  2. iOS.ChangeIniOS7

    1. Multitasking in iOS 7 http://www.objc.io/issue-5/multitasking.html http://www.slideshare.net/mrem ...

  3. ORM学员管理系统单表查询示例

    前期准备工作 首先创建好一个项目 一:必须使用MySQL创建一个库 因为ORM只能对表和数据进行处理,所以库必须自己创建 create database mysite; 二:进行相关的配置 在项目my ...

  4. Django 访问admin提示ViewDoesNotExist at /admin/

    ViewDoesNotExist at /admin/ Could not import django.views.generic.simple.redirect_to. Parent module ...

  5. vim 中将 TAB 换成 4 个空格

    最近开始学习Python,其语法简单,但是对代码格式要求比较严格.代码采用缩进方式,按照约定采用4个空格的缩进. Linux下配置vim编辑器中Tab键为4个空格方法: 1. 编辑文件: vi /et ...

  6. .net使用NPOI的XSSFWorkbook进行web开发中导出Excel

    之前也使用过NPOI导出excel,这次是因为在导出的excel里新增了几个列,正好超出了255的限制,所以又要改了. 今天主要出了4个问题: 1. Invalid column index (256 ...

  7. spring学习十九 常用注解

    1. @Component 创建类对象,相当于配置<bean/>2. @Service 与@Component 功能相同. 2.1 写在 ServiceImpl 类上.3. @Reposi ...

  8. Desktop Central帮助您升级Windows 10,获取更新的五大增强功能

  9. 使用小技巧加快IDEA的开发速度

    一.live template的使用. 1.live template(自定义模板的载入)打开: Ctrl+shift+A 再在命令行中间输入live  template弹出用户自定义的界面.需要自行 ...

  10. Hadoop3集群搭建之——配置ntp服务

    上篇: Hadoop3集群搭建之——虚拟机安装 Hadoop3集群搭建之——安装hadoop,配置环境 下篇: Hadoop3集群搭建之——hive安装 Hadoop3集群搭建之——hbase安装及简 ...