BZOJ2938 POI2000 病毒 补全AC自动机 Trie图判环
来源:互联网 发布:增值税发票扫描软件 编辑:程序博客网 时间:2024/05/22 00:11
大家都太强了辣,和我这样的大蒟蒻共勉吼不吼啊 ?
题意:
给您一堆
题解:
补全AC自动机判环(不走以单词结尾的点(不止是它本身)),记得加一个优化,就是搜过了没有答案了就
然后就是简单的DFS判环。
/************************************************************** Problem: 2938 User: Lazer2001 Language: C++ Result: Accepted Time:64 ms Memory:5980 kb****************************************************************/# include <bits/stdc++.h># define N 300010class AhoCrasickAutoMaton { private : bool ban [N], in [N], visited [N] ; int go [N] [2], fail [N], ncnt ; public : inline void insert ( char* s ) { int cur = 0 ; for ( char* pt = s ; *pt ; ++ pt ) { if ( ! go [cur] [*pt - '0'] ) go [cur] [*pt - '0'] = ++ ncnt ; cur = go [cur] [*pt - '0'] ; } ban [cur] = 1 ; } void build ( ) { fail [0] = -1 ; static std :: queue < int > Q ; for ( int i = 0 ; i < 2 ; ++ i ) Q.push ( go [0] [i] ) ; while ( ! Q.empty ( ) ) { int cur = Q.front ( ) ; Q.pop ( ) ; for ( int i = 0 ; i < 2 ; ++ i ) { if ( go [cur] [i] ) { fail [go [cur] [i]] = go [fail [cur]] [i] ; Q.push ( go [cur] [i] ) ; } else { go [cur] [i] = go [fail [cur]] [i] ; } } ban [cur] |= ban [fail [cur]] ; } } inline bool Dfs ( int cur ) { in [cur] = 1 ; for ( int i = 0 ; i < 2 ; ++ i ) { int& v = go [cur] [i] ; if ( in [v] ) return 1 ; if ( ban [v] || visited [v] ) continue ; if ( Dfs ( v ) ) return 1 ; visited [v] = 1 ; // advanced : if there is no answer, we do not visit it anymore. } return in [cur] = 0, 0 ; }} Ac ;int main ( ) { int T ; scanf ( "%d", & T ) ; while ( T -- ) { static char s [N] ; scanf ( "%s", s ) ; Ac.insert ( s ) ; } Ac.build ( ) ; puts ( Ac.Dfs ( 0 ) ? "TAK" : "NIE" ) ; return 0 ;}
阅读全文
0 0
- BZOJ2938 POI2000 病毒 补全AC自动机 Trie图判环
- AC自动机【poi2000】bzoj2938 病毒
- BZOJ2938: [Poi2000]病毒 AC自动机
- [bzoj2938][Poi2000]病毒 AC自动机
- BZOJ2938[Poi2000]病毒 AC自动机
- bzoj2938 [Poi2000]病毒 AC自动机+DP
- bzoj2938[Poi2000]病毒 AC自动机+dfs
- [BZOJ2938][Poi2000]病毒(AC自动机+拓扑排序)
- BZOJ2938 [Poi2000]病毒 解题报告【AC自动机】【DFS】
- 【bzoj2938】[Poi2000]病毒 trie图+dfs
- 【BZOJ2938】病毒,AC自动机练习
- BZOJ2938: [Poi2000]病毒
- bzoj2938: [Poi2000]病毒
- bzoj2938【Poi2000】病毒
- BZOJ2938: [Poi2000]病毒
- bzoj2938 [Poi2000]病毒
- 【BZOJ】【P2938】【Poi2000】【病毒】【题解】【AC自动机】
- 【AC自动机】【bzoj 2938】: [Poi2000]病毒
- golang调用lua脚本之安装golua
- sift+RANSAC+findHomography
- kubernetes1.8.4 安装指南 -- 6. 安装kubernetes master
- 如何下载Spring jar包(dist文件)
- Asp.net 框架解析----生成编译后的文件
- BZOJ2938 POI2000 病毒 补全AC自动机 Trie图判环
- 杭电acm P2019数列有序
- 分享式商业模型
- 使用阿里云的国内镜像仓库地址
- 二分图的匈牙利算法
- 常用滤波器设计之低通滤波器、高通滤波器、带通滤波器、带阻滤波器
- 机器学习基本概念
- servlet获取请求参数
- js的get方法的中文参数,谷歌不乱码,IE乱码解答