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自动机. 假设我们有了一个无限长的安全代码, ...
随机推荐
- css中的宽和高
width width表示宽 height height表示高 max-width.min-width max-width表示最大宽度 min-width表示最小宽度 max-height.min-h ...
- LeetCode7-ReverseInteger
LeetCode7-ReverseInteger LeetCodeeasyOverflow 题目 题目所在链接为 LeetCode-7:ReverseInteger 题目描述 给出一个32位的有符号整 ...
- Visual Studio Code mac OS 安装 中文简体语言包
先下载中文简体语言包 官网 https://marketplace.visualstudio.com/search?target=VSCode&category=Language%20Pack ...
- Ethtool工具源码剖析
Ethtool工具源码剖析 ethool是一个实用的工具,用来给系统管理员以大量的控制网络接口的操作.可以用来控制接口参数,速度,介质类型,双工模式,DMA环设置,硬件校验和,LAN唤醒操作等.本人经 ...
- 外媒评Mate 10 Pro:智慧拍照惊人,续航能力卓越
说到近期的热门机型,华为Mate 10 Pro绝对算是被人们谈论最多的一个,其可以算是首款搭载移动AI芯片的顶级旗舰机型,而且AI技术在这部手机上拥有多项实际的应用,带来的体验非传统智能手机可比. 由 ...
- 8种MySQL分页方法总结
这篇文章主要介绍了8种MySQL分页方法总结,小编现在才知道,MySQL分页竟然有8种实现方法,本文就一一讲解了这些方法,需要的朋友可以参考下 MySQL的分页似乎一直是个问题,有什么优化方法吗?网上 ...
- zwx_helper
通过重载c++operator,实现一种轻松的wxWidgets界面编程风格,如html编写页面一样直观容易. 举一例,一个界面页有四块区,如果是开发html的话,是从头到脚一气书写 <div ...
- unittest(封装用例)
from selenium import webdriver from time import sleep import unittest #导入unittest库 import HTMLTestRu ...
- libevent(一)定时器Demo
开始研究libevent,使用的版本是2.0.22. 实现一个定时器:每2秒执行一次printf. #include <stdio.h> #include <stdlib.h> ...
- python-CSV格式清洗与转换、CSV格式列变换、CSV格式数据清洗【数据读入的三种方法】【strip、replace、split、join函数的使用】
1)CSV格式清洗与转换 描述 附件是一个CSV格式文件,提取数据进行如下格式转换: (1)按行进行倒序排列: (2)每行数据倒序排 ...