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自动机. 假设我们有了一个无限长的安全代码, ...
随机推荐
- sqlilabs less18-22 HTTP头的注入
less18 user-agent的注入 源码分析: check_input对name,password进行了过滤 function check_input($value) { if(!empty($ ...
- phpspider框架的使用
手册:https://doc.phpspider.org/configs-members.html 参考:https://www.jianshu.com/p/01052508ea7c 不多说,代码贴上 ...
- Ansible Jinja2 模板使用
Ansible Jinja2 模板使用.语法与使用案例 主机规划 添加用户账号 说明: 1. 运维人员使用的登录账号: 2. 所有的业务都放在 /app/ 下「yun用户的家目录」,避免业务数据乱放: ...
- 任意文件下载(pikachu)
任意文件下载漏洞 很多网站都会提供文件下载功能,即用户可以通过点击下载链接,下载到链接所对应的文件. 但是,如果文件下载功能设计不当,则可能导致攻击者可以通过构造文件路径,从而获取到后台服务器上的其他 ...
- [Inno Setup] 执行程序,返回值不为0时提示用户
procedure LoadPerfCounter(); var Ret : Integer; begin if Exec(ExpandConstant('{sys}') + '\lodctr.exe ...
- JVM原理与深度调优(一)
什么是jvm jvm是java虚拟机 运行在用户态.通过应用程序实现java代码跨平台.与平台无关.实际上是"一次编译,到处执行" 1.从微观来说编译出来的是字节码!去到哪个平台都 ...
- 二进制安装MySQL及破解密码
二进制安装MySQL及破解密码 1.确保系统中有依赖的libaio 软件,如果没有: yum -y install libaio 2.解压二进制MySQL软件包 tar xf mysql-5.7.24 ...
- 从蓝瘦“想哭”到 SELinux 看操作系统安全何在
最近一周,来自网络的"想哭"勒索病毒(Wannacry Ransomware)在世界各地同时上演了一部绑匪大片,台词华丽,演技出色,当仁不让地新晋世界第一网红.全球各国除了默默忙于 ...
- Vue项目中实现图片懒加载
个人网站 https://iiter.cn 程序员导航站 开业啦,欢迎各位观众姥爷赏脸参观,如有意见或建议希望能够不吝赐教! ---对于图片过多的页面,为了加速页面加载速度,所以很多时候我们需要将页面 ...
- P3306 [SDOI2013]随机数生成器(bzoj3122)
洛谷 bzoj 特判+多测真恶心 . \(0\le a\le P−1,0\le b\le P−1,2\le P\le 10^9\) Sample Input 3 7 1 1 3 3 7 2 2 2 0 ...