【bzoj2938】【Poi2000】病毒

题解:
- 对病毒串建立ac自动机;
- 有一个无限长的串等价于可以一直在自动机上匹配,等价于自动机上的转移有环;
- 当然前提是去掉病毒节点的fail子树;
- 写一个dfs记录是否在栈中,来过没有找到就不必再来了再记录一个vis保证复杂度;
- 然而。。。。。。我在找环的时候呆了很久,最后写了tarjan;
- 如果你也是有些tarjan的危险想法的话注意特判转移的自环的情况;
#include<bits/stdc++.h>
using namespace std;
const int N=;
int n,sz,ch[N][],fl[N],que[N],head,tail,vis[N],hd[N],o,dfn[N],idx,low[N],fg,del[N];
struct Edge{int v,nt;}E[N<<];
char s[N];
void adde(int u,int v){
if(u==v)fg=;
E[o]=(Edge){v,hd[u]};hd[u]=o++;
}
void get_fl(){
for(int i=;i<;i++)if(ch[][i]){
que[++tail]=ch[][i];
if(!vis[ch[][i]])adde(,ch[][i]);
}else {fg=;return;}
while(head<tail){
int u=que[++head];
for(int i=;i<;i++){
int&v=ch[u][i];
if(!v){
v=ch[fl[u]][i];
if(!vis[v])adde(u,v);
continue;
}
fl[v]=ch[fl[u]][i];
vis[v]|=vis[fl[v]];
if(!vis[v])adde(u,v);
que[++tail]=v;
}
}
}
void tarjan(int u){
if(fg)return ;
que[++head]=u;
dfn[u]=low[u]=++idx;
for(int i=hd[u];~i;i=E[i].nt){
int v=E[i].v;
if(!dfn[v])tarjan(v),low[u]=min(low[u],low[v]);
else if(!del[v])low[u]=min(low[u],dfn[v]);
}
if(dfn[u]==low[u]){
int cnt=,v;
do{
cnt++;
del[v=que[head--]]=;
}while(v!=u);
if(cnt > )fg=;
}
}
int main(){
// freopen("bzoj2938.in","r",stdin);
// freopen("bzoj2938.out","w",stdout);
memset(hd,-,sizeof(hd));
scanf("%d",&n);
for(int i=;i<=n;i++){
scanf("%s",s+);
int len=strlen(s+),u=;
for(int j=;j<=len;j++){
if(!ch[u][s[j]-''])ch[u][s[j]-'']=++sz;
u=ch[u][s[j]-''];
}
vis[u]=;
}
get_fl();
head=;tarjan();
if(fg)puts("TAK");else puts("NIE");
return ;
}bzoj2938
【bzoj2938】【Poi2000】病毒的更多相关文章
- [bzoj2938][Poi2000]病毒_AC自动机
病毒 bzoj-2938 Poi-2000 题目大意:给你n个01串,问是否存在一个无限长的01串使得这个01的任意子串都不等于给出的01串. 注释:All_length<=30,000 想法: ...
- BZOJ2938: [Poi2000]病毒(AC自动机)
2938: [Poi2000]病毒 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 1678 Solved: 849[Submit][Status][D ...
- BZOJ2938 [Poi2000]病毒 和 BZOJ5261 Rhyme
[Poi2000]病毒 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已经找出了所有的病毒代码 ...
- bzoj2938: [Poi2000]病毒
建AC自动机,把所有病毒的节点都删掉,dfs判有没有环,有环就找得到. #include <iostream> #include <cstdio> #include <c ...
- BZOJ2938[Poi2000]病毒——AC自动机
题目描述 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已经找出了所有的病毒代码段,试问,是否 ...
- BZOJ2938:[POI2000]病毒(AC自动机)
Description 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已经找出了所有的病毒代码 ...
- BZOJ2938 [Poi2000]病毒 【AC自动机】
题目 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已经找出了所有的病毒代码段,试问,是否存在 ...
- BZOJ2938 POI2000病毒
我们不能让重复过的字串出现在无限串上(就叫这个了...) 也就是要自动机一直能匹配但就是匹配不到,那么就是在自动机上找一个环. dfs判环即可.注意是个有向图. #include<bits/st ...
- 【BZOJ2938】[Poi2000]病毒 AC自动机+DFS
[BZOJ2938][Poi2000]病毒 Description 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码 ...
- 【BZOJ-2938】病毒 Trie图 + 拓扑排序
2938: [Poi2000]病毒 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 609 Solved: 318[Submit][Status][Di ...
随机推荐
- LVS 负载均衡 keepalive
为什么要学lvs 工作在网络模型的7层,可以针对http应用做一些分流的策略,比如针对域名.目录结构, Nginx单凭这点可利用的场合就远多于LVS了.最新版本的Nginx也支持4层TCP负载,曾经这 ...
- Alpha阶段项目展示博客
烫烫烫烫烫(hotcode5)团队 1. 团队成员的简介和个人博客地址 刘畅 博客园ID:森高Slontia 身份:PM 个人介绍: 弹丸粉 || 小说创作爱好者 || 撸猫狂魔(x || 生命的价值 ...
- 第三次实验报告 敏捷开发与XP实践
一. 实验内容 (一)敏捷开发与XP 摘要:一项实践在XP环境中成功使用的依据通过XP的法则呈现,包括:快速反馈.假设简单性.递增更改.提倡更改.优质工作.XP软件开发的基石是XP的活动,包括:编码 ...
- YQCB冲刺第二周第二天
今天的任务依然为实现查看消费明细的功能. 遇到的问题为从数据库中分类读取,实现图标的显示. 站立会议为: 任务面板为:
- Task 4.5 求二维数组中的最大连通子数组之和
任务:输入一个二维整形数组,数组里有正数也有负数. 求所有子数组的和的最大值.要求时间复杂度为O(n). 1.设计思想:因为用之前的解决子数组最大和的问题的思路一直没能解决这个问题,后来看到同学使用将 ...
- 提交内容到版本库:git commit
- HDU 4514 湫湫系列故事——设计风景线 树的直径
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4514 湫湫系列故事--设计风景线 Time Limit: 5000/2000 MS (Java/Ot ...
- GIT的使用及心得
先给大家个很棒的GIT使用教程链接http://blog.jobbole.com/78960/ 这个链接是我在学习使用GIT时看的教程博客,分享给大家,里面还有介绍SVN与GIT的区别 GITHUB上 ...
- 第一次spring冲刺第6天
鉴于昨天的调查,今天做了个谈论,主要针对以下几个问题 1.我们的客户类型? 2.如何实现他们的需求? 3.他们真正想要什么? 4.如何保证他们的满足度? 5.怎么使得工程不陷入死循环? 6.还存在什么 ...
- Beta冲刺 (6/7)
队名:天机组 组员1友林 228(组长) 今日完成:修改代码 明天计划:封装代码 剩余任务:优化网络通讯机制 主要困难:暂无 收获及疑问:暂无 组员2方宜 225 今日完成:优化了一部分活动,调整了界 ...