[BZOJ2938][POI2000]病毒 做题笔记
来源:互联网 发布:黑帽seo 编辑:程序博客网 时间:2024/05/21 11:26
·· / ·– ·· ·-·· ·-·· / ·–· · ·-· ··· ·· ··· - / ··- -· - ·· ·-·· / ·· / ·– ·· -·
题目来源:http://www.lydsy.com/JudgeOnline/problem.php?id=2938
zky:
首先我们把所有串建一个AC自动机
方便起见我们直接把fail指针合并到子结点
如果一个串能无限长,也就是说它可以在AC自动机上一直进行匹配但就是匹配不上
这题trie树的fail指针可以直接化成边,构建fail时,一旦匹配不上,即可将ch[i][c]赋为ch[fail[i]][c]。
注意单词结点x本身不能走,且通过fail能走到x的y也不能走。
在新图上dfs判环。
#include <cstdio>#include <algorithm>#include <cstring>#include <queue>const int N=30009;using namespace std;int ch[N][2],fail[N],danger[N],cnt;bool vis[N],instack[N];char s[N];int n,m;queue<int> q;void ins () { scanf("%s",s); int len=strlen(s),p=1,c; for (int i=0;i<len;i++) { if (!ch[p][c=s[i]-48]) ch[p][c]=++cnt;// p=ch[p][c]; } danger[p]=1;}void getfail () { int p=1,k,c; while (!q.empty()) q.pop(); q.push(1);fail[0]=1;// while (!q.empty()) { p=q.front(); q.pop(); for (int i=0;i<2;i++) { if (!ch[p][i]) { ch[p][i]=ch[fail[p]][i];continue; }// k=fail[p]; while (!ch[k][i]) k=fail[k]; fail[ch[p][i]]=ch[k][i]; danger[ch[p][i]]|=danger[ch[k][i]];// q.push(ch[p][i]); } }}bool dfs (int x) { instack[x]=1; for (int i=0;i<2;i++) { if (instack[ch[x][i]]) return 1; if (vis[ch[x][i]]||danger[ch[x][i]]) continue; vis[ch[x][i]]=1; if (dfs(ch[x][i])) return 1; } instack[x]=0; return 0;}int main () { scanf("%d",&n); cnt=1;ch[0][0]=ch[0][1]=1; for (int i=1;i<=n;i++) ins(); getfail(); if (dfs(1)) puts("TAK"); else puts("NIE"); return 0;}
0 0
- [BZOJ2938][POI2000]病毒 做题笔记
- BZOJ2938: [Poi2000]病毒
- bzoj2938: [Poi2000]病毒
- bzoj2938【Poi2000】病毒
- BZOJ2938: [Poi2000]病毒
- bzoj2938 [Poi2000]病毒
- BZOJ2938 POI2000 病毒 题解&代码
- AC自动机【poi2000】bzoj2938 病毒
- BZOJ2938: [Poi2000]病毒 AC自动机
- [bzoj2938][Poi2000]病毒 AC自动机
- BZOJ2938[Poi2000]病毒 AC自动机
- 【bzoj2938】[Poi2000]病毒 trie图+dfs
- bzoj2938 [Poi2000]病毒 AC自动机+DP
- bzoj2938[Poi2000]病毒 AC自动机+dfs
- [BZOJ2938][Poi2000]病毒(AC自动机+拓扑排序)
- BZOJ2938 [Poi2000]病毒 解题报告【AC自动机】【DFS】
- BZOJ2938 POI2000 病毒 补全AC自动机 Trie图判环
- bzoj2938病毒
- 图片压缩
- 高仿QQ讨论组头像拼图
- 【bzoj2242】[SDOI2011]计算器 快速幂+BSGS
- 广告轮播
- Machine Learning - Andrew Ng on Coursera (Week 6)
- [BZOJ2938][POI2000]病毒 做题笔记
- Linux性能监测:磁盘IO
- Kubernetes1.2新特性分析(二)
- 关于数组的逆置问题
- 正则表达式的优先级
- requireJs模块化实现返回顶部的功能
- SQL_基础2015-11-9
- Git 命令行汇总
- 谷歌发布机器学习服务“Cloud Machine Learning”