[luoguP2444] [POI2000]病毒(AC自动机 + dfs)
先把所有串建一个AC自动机,
如果要找一个不包含任意一个串的串,
说明这个串一直在AC自动机上匹配但匹配不到,
也就是说,匹配时除去val值为1的点,除去fail指针指向val值为1的点,是否有环,dfs即可。
因为val值为1说明匹配上,fail指针指向的点x,根到x所形成的字符串是当前串的后缀,
所以也得除去fail指针指向val值为1的点的点。
——代码
#include <queue>
#include <cstdio>
#include <cstring> using namespace std; const int MAXN = ;
int n, cnt;
int ch[MAXN << ][], fail[MAXN << ];
char s[MAXN];
bool vis[MAXN << ], ins[MAXN << ], val[MAXN << ];
queue <int> q; inline void insert()
{
int i, x, len = strlen(s), now = ;
for(i = ; i < len; i++)
{
x = s[i] - '';
if(!ch[now][x]) ch[now][x] = ++cnt;
now = ch[now][x];
}
val[now] = ;
} inline void make_fail()
{
int i, x, now;
for(i = ; i <= ; i++) if(ch[][i]) q.push(ch[][i]);
while(!q.empty())
{
now = q.front(), q.pop();
for(i = ; i <= ; i++)
{
if(!ch[now][i])
{
ch[now][i] = ch[fail[now]][i];
continue;
}
fail[ch[now][i]] = ch[fail[now]][i];
q.push(ch[now][i]);
val[ch[now][i]] |= val[fail[ch[now][i]]];
}
}
} inline bool dfs(int u)
{
int i, v;
ins[u] = ;
for(i = ; i <= ; i++)
{
v = ch[u][i];
if(ins[v]) return ;
if(val[v] || vis[v]) continue;
vis[v] = ;
if(dfs(v)) return ;
}
ins[u] = ;
return ;
} int main()
{
int i, j;
scanf("%d", &n);
for(i = ; i <= n; i++)
{
scanf("%s", s);
insert();
}
make_fail();
if(dfs()) puts("TAK");
else puts("NIE");
return ;
}
[luoguP2444] [POI2000]病毒(AC自动机 + dfs)的更多相关文章
- 【BZOJ2938】[Poi2000]病毒 AC自动机+DFS
[BZOJ2938][Poi2000]病毒 Description 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码 ...
- BZOJ2938[Poi2000]病毒——AC自动机
题目描述 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已经找出了所有的病毒代码段,试问,是否 ...
- [POI2000]病毒 --- AC自动机
[POI2000]病毒 题目描述: 二进制病毒审查委员会最近发现了如下的规律: 某些确定的二进制串是病毒的代码. 如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的. 现在委员会已经找 ...
- BZOJ2938:[POI2000]病毒(AC自动机)
Description 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已经找出了所有的病毒代码 ...
- 【bzoj2938】[Poi2000]病毒 AC自动机
题目描述 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已经找出了所有的病毒代码段,试问,是否 ...
- BZOJ [Poi2000]病毒 AC自动机_DFS_细节
Code: #include<bits/stdc++.h> #define setIO(s) freopen(s".in","r",stdin) # ...
- 【洛谷】P2444 [POI2000]病毒——AC自动机
题目链接 题目描述 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已经找出了所有的病毒代码段, ...
- P2444 [POI2000]病毒 AC自动机
P2444 [POI2000]病毒 #include <bits/stdc++.h> using namespace std; ; struct Aho_Corasock_Automato ...
- BZOJ 2938: [Poi2000]病毒 [AC自动机 拓扑排序]
2938: [Poi2000]病毒 题意:判断是否存在无限长的不含模式串的字符串.只有01. 建出套路DP的转移图,判断有环就行了 练习一下拓扑排序 #include <iostream> ...
- BZOJ.2938.[POI2000]病毒(AC自动机)
题目链接 \(Description\) 给n个模式串,问是否存在长度无限的主串,使得任何一个模式串都没有在主串中出现. \(Solution\) 先建AC自动机. 假设我们有了一个无限长的安全代码, ...
随机推荐
- ABBYY Cup 3.0 - Finals (online version)
A 开个数组记录一下 #include <iostream> #include<cstdio> #include<cstring> #include<algo ...
- 教你如何在实战项目中使用WCF
我们都知道调用WCF直接在Service References中引用可以远程调用的WCF Url就行了. 但是我们想过没,在Development环境中可以这样做,但是QA.UAT.Productio ...
- Caused by: javax.el.PropertyNotFoundException: Property 'product' not found on type java.lang.String
今天在JSP利用EL表达式取值报了 "javax.el.PropertyNotFoundException”,经过debug和打印将问题定位到这段代码: HTML应该是没啥问题,看提示在ja ...
- VUE 全选
<div id="vue_det"> <p>全选:</p> <input type="checkbox" id=&qu ...
- 一个完整的http请求分析
Request URL:http://localhost:8080/test.jhtmlRequest Method:POSTStatus Code:200 OKRemote Address:[::1 ...
- Android SDK镜像更新网速慢的解决问题
通过更换代理解决 Android SDK 在线更新镜像服务器资源:大连东软信息学院镜像服务器地址:http://mirrors.neusoft.edu.cn 端口:80北京化工大学镜像服务器地址:IP ...
- 把Scheme翻译成Java和C++的工具
一.为什么要写这个工具? 公司内容有多个项目需要同一个功能,而这些项目中,有的是用Java的,有的是用C++的,同时由于某些现实条件限制,无法所有项目都调用统一的服务接口(如:可能运行在无网络的情况下 ...
- java规范与标准?
所谓规范,即指由很多人同时遵守的行为或理论. java的规范并不是指其中一种,而是有很多种,比如java编码规范,java命名规范,java虚拟机规范等等,甚至于一个编码规范都有很多种,不同的公司.组 ...
- Swift3命名空间的实现
最近在看一些Swift开源库的时候,发现了一些优秀的开源库都使用了命名空间,例如Kingfisher这个开源库中,就针对UIImage,UIImageView,UIButton做了命名空间的扩展.通过 ...
- 20面向对象三特征 之继承 方法重写 super
继承是:多个类有重复内容,把重复内容放到一个新类中,就可以通过extends关键词去让原来的类和新类产生继承关系,子类只能拿到父类一部分信息.通过extends关键词去指明类与类之间的关系,一个父类可 ...