【BZOJ2938】[Poi2000]病毒 AC自动机+DFS
【BZOJ2938】[Poi2000]病毒
Description
Input
Output
Sample Input
01
11
00000
Sample Output
题解:先用AC自动机把fail合并到儿子节点上,删去单词的结束点,然后用DFS看一下Trie树里有没有环就行了,有环就是TAK
也可以用拓补排序判环,但是比较难搞,因为不知道入度什么时候为0
#include <cstdio>
#include <cstring>
#include <iostream>
#include <queue>
using namespace std;
const int maxn=30010;
struct node
{
int ch[2],fail,cnt;
}p[maxn];
int n,tot,ans;
char str[maxn];
int vis[maxn],ins[maxn];
queue<int> q;
void dfs(int x)
{
int i;
ins[x]=vis[x]=1;
for(i=0;i<=1;i++)
{
if(p[p[x].ch[i]].cnt) continue;
if(!vis[p[x].ch[i]]) dfs(p[x].ch[i]);
else if(ins[p[x].ch[i]]) ans=1;
}
ins[x]=0;
}
int main()
{
scanf("%d",&n);
int i,j,k,u,t;
tot=1;
for(i=1;i<=n;i++)
{
scanf("%s",str);
k=strlen(str);
u=1;
for(j=0;j<k;j++)
{
if(!p[u].ch[str[j]-'0']) p[u].ch[str[j]-'0']=++tot;
u=p[u].ch[str[j]-'0'];
}
p[u].cnt=1;
}
q.push(1);
while(!q.empty())
{
u=q.front(),q.pop();
for(i=0;i<=1;i++)
{
if(p[u].ch[i])
{
q.push(p[u].ch[i]);
if(u==1) p[p[u].ch[i]].fail=1;
else p[p[u].ch[i]].fail=p[p[u].fail].ch[i];
p[p[u].ch[i]].cnt|=p[p[p[u].fail].ch[i]].cnt;
}
else
{
if(u==1) p[u].ch[i]=1;
else p[u].ch[i]=p[p[u].fail].ch[i];
}
}
}
dfs(1);
if(ans==1) printf("TAK");
else printf("NIE");
return 0;
}
【BZOJ2938】[Poi2000]病毒 AC自动机+DFS的更多相关文章
- BZOJ2938[Poi2000]病毒——AC自动机
题目描述 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已经找出了所有的病毒代码段,试问,是否 ...
- BZOJ2938:[POI2000]病毒(AC自动机)
Description 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已经找出了所有的病毒代码 ...
- 【bzoj2938】[Poi2000]病毒 AC自动机
题目描述 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已经找出了所有的病毒代码段,试问,是否 ...
- [bzoj2938][Poi2000]病毒_AC自动机
病毒 bzoj-2938 Poi-2000 题目大意:给你n个01串,问是否存在一个无限长的01串使得这个01的任意子串都不等于给出的01串. 注释:All_length<=30,000 想法: ...
- [POI2000]病毒 --- AC自动机
[POI2000]病毒 题目描述: 二进制病毒审查委员会最近发现了如下的规律: 某些确定的二进制串是病毒的代码. 如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的. 现在委员会已经找 ...
- 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> ...
随机推荐
- node-webkit连接mysql
一.安装node.js mysql驱动库 node-webkit里面没有mysql模块的,我们需要安装mysql模块.我们可以使用npm(Node package manager)进行安装.这里使用到 ...
- altium designer应用技巧---cyclone IV代芯片底部焊盘问题
首先对于 altera 公司的FPGA芯片来讲,在cyclone III代以上,芯片的底部增加了一 个焊盘,很多工程师往往以为是散热用,其实不然,底部焊盘需要接地(altera手册上面 明确规定,Th ...
- 第三百一十七节,Django框架,缓存
第三百一十七节,Django框架,缓存 由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存,缓存将一个某个views的返 ...
- 第二百九十二节,RabbitMQ多设备消息队列-Python开发
RabbitMQ多设备消息队列-Python开发 首先安装Python开发连接RabbitMQ的API,pika模块 pika模块为第三方模块 对于RabbitMQ来说,生产和消费不再针对内存里的一 ...
- 从零开始,制定PHP学习计划
7月份学习计划1-15 搭建开发环境.做个小demo 增删改查.Mysql数据库16-30号 架构设计.服务器管理.版本控制 8月份正式入手项目jquery脚本学习Thinksns开源学习.核心业务学 ...
- e677. 模糊化图像
This example demonstrates a 3x3 kernel that blurs an image. Kernel kernel = new Kernel(3, 3, new flo ...
- 使用ffmepg的lib库调试,debug版本下调试无问题,但release版本会出现跑飞的现象
如题(“使用ffmepg的lib库调试,debug版本下调试无问题,但release版本会出现跑飞的现象”). 今天使用ffmpeg进行宿放和颜色格式转换,很简单的代码,却折腾了我一天,这里说来就气啊 ...
- css -- css选择器
选择器 例子 例子描述 CSS .class .intro 选择 class="intro" 的所有元素. 1 #id #firstname 选择 id="firstna ...
- 【Java面试题】60 接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承具体类(concrete class)? 抽象类中是否可以有静态的main方法?
接口可以继承接口.抽象类可以实现(implements)接口,抽象类可以继承具体类.抽象类中可以有静态的main方法. 问: 抽象类是否可继承实体类 (concrete class) 答: 抽象类是 ...
- uniqid,md5,microtime
<?php header("content-type:text/html;charset=utf-8"); $str = uniqid(md5(microtime(true) ...