P2444 [POI2000]病毒 AC自动机
#include <bits/stdc++.h>
using namespace std;
const int maxn = ; struct Aho_Corasock_Automaton {
struct node {
int fail; // 失配指针
int son[]; // 子节点的位置
bool danger; // 危险标记
}Trie[maxn];
int cnt = ; // Trie指针
void insert(char *s) {
int len = strlen(s);
int now = ; // Trie当前指针
for (int i = ; i < len; ++i) {
if (Trie[now].son[s[i]-''] == ) { // 如果没有这个子节点
Trie[now].son[s[i]-''] = ++cnt; // 构造该节点
}
now = Trie[now].son[s[i]-''];
}
Trie[now].danger = true;
}
void get_fail() { // 构造fail指针
queue<int> que;
for (int i = ; i < ; ++i) { // 先提前构造第二层
if (Trie[].son[i] != ) { // 如果存在该节点
Trie[Trie[].son[i]].fail = ; // fail指向root节点
que.push(Trie[].son[i]); // 加入队列
}
}
while (!que.empty()) { // bfs求fail指针
int u = que.front(); que.pop();
for (int i = ; i < ; ++i) {
if (Trie[Trie[u].fail].danger == true)
Trie[u].danger = true;
if (Trie[u].son[i] != ) { // 如果存在该子节点
// 子节点的fail指针指向当前节点的fail指针指向内容相同的子节点
Trie[Trie[u].son[i]].fail = Trie[Trie[u].fail].son[i];
que.push(Trie[u].son[i]); // 加入队列
}
else { // 如果不存在这个子节点
// 当前节点的该子节点指向当前节点的fail指针指向的止隔子节点
Trie[u].son[i] = Trie[Trie[u].fail].son[i];
}
}
}
}
}AC;
bool vis[maxn];
bool dfs(int u) {
if (vis[u] == true) return true;
vis[u] = true;
if (!AC.Trie[AC.Trie[u].son[]].danger) {
if (dfs(AC.Trie[u].son[])) {
return true;
}
}
if (!AC.Trie[AC.Trie[u].son[]].danger) {
if (dfs(AC.Trie[u].son[])) {
return true;
}
}
vis[u] = false;
return false;
}
char t[maxn];
int main() {
int n; scanf("%d",&n);
for (int i = ; i <= n; ++i) {
scanf("%s",t);
AC.insert(t);
}
AC.get_fail();
if (dfs() == true) puts("TAK"); // 从字典树的根结点开始找环
else puts("NIE");
return ;
}
P2444 [POI2000]病毒 AC自动机的更多相关文章
- 【洛谷】P2444 [POI2000]病毒——AC自动机
题目链接 题目描述 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已经找出了所有的病毒代码段, ...
- [POI2000]病毒 --- AC自动机
[POI2000]病毒 题目描述: 二进制病毒审查委员会最近发现了如下的规律: 某些确定的二进制串是病毒的代码. 如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的. 现在委员会已经找 ...
- 【BZOJ2938】[Poi2000]病毒 AC自动机+DFS
[BZOJ2938][Poi2000]病毒 Description 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码 ...
- BZOJ 2938: [Poi2000]病毒 [AC自动机 拓扑排序]
2938: [Poi2000]病毒 题意:判断是否存在无限长的不含模式串的字符串.只有01. 建出套路DP的转移图,判断有环就行了 练习一下拓扑排序 #include <iostream> ...
- BZOJ2938[Poi2000]病毒——AC自动机
题目描述 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已经找出了所有的病毒代码段,试问,是否 ...
- BZOJ2938:[POI2000]病毒(AC自动机)
Description 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已经找出了所有的病毒代码 ...
- 【bzoj2938】[Poi2000]病毒 AC自动机
题目描述 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已经找出了所有的病毒代码段,试问,是否 ...
- BZOJ [Poi2000]病毒 AC自动机_DFS_细节
Code: #include<bits/stdc++.h> #define setIO(s) freopen(s".in","r",stdin) # ...
- BZOJ.2938.[POI2000]病毒(AC自动机)
题目链接 \(Description\) 给n个模式串,问是否存在长度无限的主串,使得任何一个模式串都没有在主串中出现. \(Solution\) 先建AC自动机. 假设我们有了一个无限长的安全代码, ...
随机推荐
- JS在线代码编辑器多种方案monaco-editor,vue-monaco-editor
前言 JavaScript在线代码编辑器. 需要代码提示,关键字高亮,能够格式化代码.(不需要在线运行) 简简单单的需求. 方案一: Monaco-editor 简介:微软的开源项目,开源中国上面的在 ...
- DEDE Fatal error: Maximum execution time of 30 seconds exceeded 致命 错误: 最大的 执行 时间 为 30 秒
刚安的DEDE 5.7 -SP1-GBK的 为何一登录后台点任何链接都显示超过30秒 后台假死 网上搜的方法一般都是更改执行时间上限,其目的是为了解决一些大的数据,真的需要30秒以上的执行时 ...
- JavaScript正则表达式及jQuery回顾
JavaScript 正则表达式,用于规定在文本中检索的内容. 一.定义正则表达式: rep = /\d+/; // js定义正则.(python定义正则:re模块 rep = "\d+&q ...
- qemu-img压缩磁盘操作
2019独角兽企业重金招聘Python工程师标准>>> qemu-img convert -c -f qcow2 -O qcow2 /data/data1.disk /opt/dat ...
- C# 基础知识系列- 14 IO篇 文件的操作 (3)
本篇继续前两篇内容,跟大家介绍一下Path类以及FileSystemInfo这个类的主要方法和属性. 上文提到,在<C# 基础知识系列-IO篇>之文件相关的内容完结之后,会带领大家开发一个 ...
- 【Elasticsearch学习】之基础概念
Elasticsearch是一个近实时的分布式搜索引起,其底层基于开源全文搜索库Lucene:Elasticsearch对Lucene进行分装,对外提供REST API 的操作接口.基于 ES,可以快 ...
- 【漫画】JAVA并发编程三大Bug源头(可见性、原子性、有序性)
原创声明:本文转载自公众号[胖滚猪学编程] 某日,胖滚猪写的代码导致了一个生产bug,奋战到凌晨三点依旧没有解决问题.胖滚熊一看,只用了一个volatile就解决了.并告知胖滚猪,这是并发编程导致的 ...
- HashMap面试知识点总结
主要参考 JavaGuide 和 敖丙 的文章, 其中也有参考其他的文章, 但忘记保存链接了, 文中图片也是引用别的大佬的, 请见谅. 新手上路, 若有问题, 欢迎指正. 背景 HashMap 的相关 ...
- python gdal 读取栅格数据
1.gdal包简介 gdal是空间数据处理的开源包,其支持超过100种栅格数据类型,涵盖所有主流GIS与RS数据格式,包括Arc/Info ASCII Grid(asc),GeoTiff (tiff) ...
- Coursera课程笔记----计算导论与C语言基础----Week 9
C语言中的控制成分(Week 9) 计算机程序的基本结构 任何具有单入口单出口的程序,都可以用顺序结构.分支结构.循环结构来表达 分支语句 在执行if语句前,先对表达式求解 if()内可以是任意的数值 ...