• 题解:

    • 对病毒串建立ac自动机;
    • 有一个无限长的串等价于可以一直在自动机上匹配,等价于自动机上的转移有环;
    • 当然前提是去掉病毒节点的fail子树;
    • 写一个dfs记录是否在栈中,来过没有找到就不必再来了再记录一个vis保证复杂度;
    • 然而。。。。。。我在找环的时候呆了很久,最后写了tarjan;
    • 如果你也是有些tarjan的危险想法的话注意特判转移的自环的情况;
  •  #include<bits/stdc++.h>
    using namespace std;
    const int N=;
    int n,sz,ch[N][],fl[N],que[N],head,tail,vis[N],hd[N],o,dfn[N],idx,low[N],fg,del[N];
    struct Edge{int v,nt;}E[N<<];
    char s[N];
    void adde(int u,int v){
    if(u==v)fg=;
    E[o]=(Edge){v,hd[u]};hd[u]=o++;
    }
    void get_fl(){
    for(int i=;i<;i++)if(ch[][i]){
    que[++tail]=ch[][i];
    if(!vis[ch[][i]])adde(,ch[][i]);
    }else {fg=;return;}
    while(head<tail){
    int u=que[++head];
    for(int i=;i<;i++){
    int&v=ch[u][i];
    if(!v){
    v=ch[fl[u]][i];
    if(!vis[v])adde(u,v);
    continue;
    }
    fl[v]=ch[fl[u]][i];
    vis[v]|=vis[fl[v]];
    if(!vis[v])adde(u,v);
    que[++tail]=v;
    }
    }
    }
    void tarjan(int u){
    if(fg)return ;
    que[++head]=u;
    dfn[u]=low[u]=++idx;
    for(int i=hd[u];~i;i=E[i].nt){
    int v=E[i].v;
    if(!dfn[v])tarjan(v),low[u]=min(low[u],low[v]);
    else if(!del[v])low[u]=min(low[u],dfn[v]);
    }
    if(dfn[u]==low[u]){
    int cnt=,v;
    do{
    cnt++;
    del[v=que[head--]]=;
    }while(v!=u);
    if(cnt > )fg=;
    }
    }
    int main(){
    // freopen("bzoj2938.in","r",stdin);
    // freopen("bzoj2938.out","w",stdout);
    memset(hd,-,sizeof(hd));
    scanf("%d",&n);
    for(int i=;i<=n;i++){
    scanf("%s",s+);
    int len=strlen(s+),u=;
    for(int j=;j<=len;j++){
    if(!ch[u][s[j]-''])ch[u][s[j]-'']=++sz;
    u=ch[u][s[j]-''];
    }
    vis[u]=;
    }
    get_fl();
    head=;tarjan();
    if(fg)puts("TAK");else puts("NIE");
    return ;
    }

    bzoj2938

【bzoj2938】【Poi2000】病毒的更多相关文章

  1. [bzoj2938][Poi2000]病毒_AC自动机

    病毒 bzoj-2938 Poi-2000 题目大意:给你n个01串,问是否存在一个无限长的01串使得这个01的任意子串都不等于给出的01串. 注释:All_length<=30,000 想法: ...

  2. BZOJ2938: [Poi2000]病毒(AC自动机)

    2938: [Poi2000]病毒 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 1678  Solved: 849[Submit][Status][D ...

  3. BZOJ2938 [Poi2000]病毒 和 BZOJ5261 Rhyme

    [Poi2000]病毒 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已经找出了所有的病毒代码 ...

  4. bzoj2938: [Poi2000]病毒

    建AC自动机,把所有病毒的节点都删掉,dfs判有没有环,有环就找得到. #include <iostream> #include <cstdio> #include <c ...

  5. BZOJ2938[Poi2000]病毒——AC自动机

    题目描述 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已经找出了所有的病毒代码段,试问,是否 ...

  6. BZOJ2938:[POI2000]病毒(AC自动机)

    Description 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已经找出了所有的病毒代码 ...

  7. BZOJ2938 [Poi2000]病毒 【AC自动机】

    题目 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已经找出了所有的病毒代码段,试问,是否存在 ...

  8. BZOJ2938 POI2000病毒

    我们不能让重复过的字串出现在无限串上(就叫这个了...) 也就是要自动机一直能匹配但就是匹配不到,那么就是在自动机上找一个环. dfs判环即可.注意是个有向图. #include<bits/st ...

  9. 【BZOJ2938】[Poi2000]病毒 AC自动机+DFS

    [BZOJ2938][Poi2000]病毒 Description 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码 ...

  10. 【BZOJ-2938】病毒 Trie图 + 拓扑排序

    2938: [Poi2000]病毒 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 609  Solved: 318[Submit][Status][Di ...

随机推荐

  1. bash登录过程 其实还不太了解,先码后看

    在刚登录Linux时,首先启动 /etc/profile 文件,然后再启动用户目录下的 ~/.bash_profile. ~/.bash_login或 ~/.profile文件中的其中一个,执行的顺序 ...

  2. CentOs6.5中安装和配置vsftp简明教程[转]

    CentOs6.5中安装和配置vsftp简明教程 林涛 发表于:2017-3-17 10:10 分类:WebServer 标签: 101次 一.vsftp安装篇 复制代码代码如下: # 安装vsftp ...

  3. Data truncation: Truncated incorrect DOUBLE value:

    在写sql查询语句queryRunner.update(connection,"update account set balance=? where name=?",account ...

  4. 2-Second Scrum Meeting-20151202

    任务安排 闫昊: 今日完成:设计学习进度的管理. 明日任务:请假.(编译+计组,压力有点大) 金哉仁: 今日完成:继续商讨APP相关界面与设计,安装AndroidStudio. 明日任务:请假.(编译 ...

  5. GIT理解

    以前从来没听过GIT,根本不知道是什么东西.老师突然让注册一个GIT帐号,不知道怎么注册, 真有点不知所措了,又听说是全英文的,感觉也是醉了!登录进去看了看,看的似懂非懂,自己 也不敢妄下定论于是上网 ...

  6. beat冲刺(7/7)

    目录 摘要 团队部分 个人部分 摘要 队名:小白吃 组长博客:hjj 作业博客:beta冲刺(7/7) 后敬甲(组长) 过去两天完成了哪些任务 ppt制作 视频拍摄 接下来的计划 准备答辩 还剩下哪些 ...

  7. HDU 4745 Two Rabbits 区间dp_回文序列

    题目链接: http://blog.csdn.net/scnu_jiechao/article/details/11759333 Two Rabbits Time Limit: 10000/5000 ...

  8. 经验分享(Android开发)

    以前对于Android开发一点了解都没有,当然,以前觉得是一件很高大上的事情,而且是我没有能力去做的工作,但是在这个小组合作开发Android后,我觉得我有了很大的进步,当然我的进步也是Android ...

  9. Head First Java & 继承

  10. 6/6 sprint2 看板和燃尽图的更新