2938: [Poi2000]病毒

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 345  Solved: 176
[Submit][Status][Discuss]

Description

二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码。如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的。现在委员会已经找出了所有的病毒代码段,试问,是否存在一个无限长的安全的二进制代码。   示例:   例如如果{011, 11, 00000}为病毒代码段,那么一个可能的无限长安全代码就是010101…。如果{01, 11, 000000}为病毒代码段,那么就不存在一个无限长的安全代码。   任务: 请写一个程序:   l         读入病毒代码;   l         判断是否存在一个无限长的安全代码;   l         将结果输出

Input

第一行包括一个整数n,表示病毒代码段的数目。以下的n行每一行都包括一个非空的01字符串——就是一个病毒代码段。所有病毒代码段的总长度不超过30000。

Output

你应在在文本文件WIN.OUT的第一行输出一个单词:   l         TAK——假如存在这样的代码;   l         NIE——如果不存在。

Sample Input

3
01 
11 
00000

Sample Output

NIE

问能否找出一个无限的不出现的给出序列的序列。

其实就是是否可以在Trie安全图内无限走,就是是否有环。

基本思路就是把Trie安全图提出来,拓扑判断是否有环(判环的问题需要整理一下)

实现好乱。呜呜呜

#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
using namespace std;int n,tot=1,ch[100005][2],val[100005],fail[100005];//Trie
int num,in[100005],head[100005],cnt,pre[100005],to[100005],V;//safe graph
char s[30005];
bool b[100005];
inline int idx(char ch){return ch-'0';}
void addedge(int x,int y)
{in[y]++;to[++cnt]=y;pre[cnt]=head[x];head[x]=cnt;
}
void insert(char *s)
{int k=1,len=strlen(s);for (int i=0;i<len;i++){int id=idx(s[i]);if (ch[k][id]==0) ch[k][id]=++tot;k=ch[k][id];}val[k]=1;
}
void getfail()
{queue<int> q;q.push(1);while (!q.empty()){int x=q.front(),y,j;q.pop();val[x]|=val[fail[x]];for (int i=0;i<=1;i++){j=fail[x];while (j&&!ch[j][i]) j=fail[j];if (ch[x][i]){fail[y=ch[x][i]]=j?ch[j][i]:1;q.push(y);}else ch[x][i]= (j?ch[j][i]:1);}}
}
bool circle()
{queue<int> q;int sum=0;for (int i=1;i<=tot;i++){if (val[i]) sum++;else for (int j=0;j<=1;j++) if (!val[ch[i][j]])addedge(i,ch[i][j]);}for (int i=1;i<=tot;i++) if (!val[i]&&!in[i]) q.push(i);while (!q.empty()){int x=q.front();q.pop();sum++;for(int i=head[x];i;i=pre[i]){int y=to[i];in[y]--;if (!in[y]) q.push(y);}}return sum==tot;
}
int main()
{scanf("%d",&n);for (int i=1;i<=n;i++){scanf("%s",s);insert(s);}getfail();if (circle()) printf("NIE");else printf("TAK");return 0;
}

bzoj2938,tyvj4338,病毒(trie+拓扑判环)相关推荐

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

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

  2. BZOJ 2140 稳定婚姻(强联通分量判环)【BZOJ修复工程】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/2140 是 hydro 的 BZOJ ...

  3. Educational Codeforces Round 72 (Rated for Div. 2) D. Coloring Edges dfs树/拓扑找环

    传送门 文章目录 题意: 思路: 题意: 给你一张图,你需要给这个图的边染色,保证如果有环那么这个环内边的颜色不全相同,输出染色方案和用的颜色个数. n,m≤5e3n,m\le5e3n,m≤5e3 思 ...

  4. Codeforces Round #467 (Div. 1): B. Sleepy Game(BFS+有向图判环)

    题意(经过转换):给你一个n个点m条边的有向图,再给你一个起点x,问存不存在一条路径满足①路径中有奇数条边:②终点的出度为0,如果存在输出Win,并在第二行输出这个路径(可能不唯一输出任意一种),否则 ...

  5. topo排序判环实操

    项目场景: 有一张订单表,和订单关系表,订单关系表中维护订单与订单之间的父子关系(多对多). 现在需要根据目标订单id去查询到目标订单关系的完整链路与链路中订单信息集合,并且判断链路是否有成环现象. ...

  6. P1444 [USACO1.3]虫洞 wormhole,新手向超详细讲解(搜索、判环、拆点、好题)

    题目传送门 题目不难,但是有很多细节和技巧. 分析题意 首先我们根据题意发现奶牛一共只会出现两种动作(两种情况),一是向右走,二是传送. 我们并不知道奶牛的位置,而题目所求的是有多少种分配虫洞传送的分 ...

  7. 1352. 虫洞【难度: 中 / 枚举 判环】

    https://www.acwing.com/problem/content/1354/ 枚举匹配方法 判环 #include<bits/stdc++.h> using namespace ...

  8. CodeForces - 1335F Robots on a Grid(拓扑找环+反向dfs/倍增)

    题目链接:点击查看 题目大意:给出一个 n * m 的矩阵,矩阵的每一个格子都有一个颜色,颜色非黑即白,除此之外每个格子还有一个指令,分别为: ' U ':向上一个单位 ' D ':向下一个单位 ' ...

  9. floyd判环算法(龟兔赛跑算法)

    floyd判环算法(龟兔赛跑算法) 注意,这个算法是用来判断一条链+一条环的图,环的长度或者环与链的交界处的,所以此floyd非彼floyd(虽然都是一个人想出来的). (图不是我的) 如果只要求环的 ...

最新文章

  1. 关于Inflater
  2. MATLAB实战系列(八)-头脑风暴优化(BSO)算法求解旅行商问题(TSP)(附MATLAB代码)
  3. Windows下 更改 pip默认缓存目录
  4. matlab画图模糊,[转载]matlab中模糊工具箱的使用
  5. leetcode 167 Two Sum II - Input array is sorted
  6. 黄开宁:搞多媒体开发要掌握好信号处理、统计和数理分析
  7. 网易视频云:分布式转码服务高可用浅析
  8. python的read_csv_python,pd.read_csv成熟导入
  9. Ubuntu-16-04-编译-Caffe-SSD
  10. jQuery - 通过文本描述设置选择控件的选定值
  11. css3常用技巧_您可能错过的5个CSS3技巧和窍门
  12. is内存地址 id 地址比较 小数据池概念
  13. 最强人工智能 OpenAI 极简教程
  14. 为啥点击种子迅雷显示forum.php,迅雷无法解析种子怎么回事_迅雷种子无法解析解决教程...
  15. nyoj366 D的小L 全排列模板题
  16. 【有根树】Rooted Trees C++
  17. 两种三角形的打印方法
  18. 中国高端制造进展神速,又一项新科技产品即将取得全球第一!
  19. 云效安全那些事儿-Codeup代码智能安全检测服务
  20. Wormhole大数据流式处理平台五大功能

热门文章

  1. html+黑板报模板,安全教育黑板报模板简洁好看
  2. 破局数据困境,迭代一年的终版解决方案竟是纯规则方法!
  3. 最便宜黑群晖(DSM5.0) -硬改 华为 升腾(Centerm) GI945 ATOM N270
  4. 这样的薪金制度合理吗?
  5. 图标制作、icon制作、(简易、高效的图标制作软件)
  6. 家人们接受DAO,拥抱DAO,DeFI崛起?
  7. Linux系统中如何实现虚拟机的远程控制
  8. 漫画:什么是 “千年虫” 问题?
  9. 【STM32Cube】学习笔记(一):光敏传感器
  10. 微信突然公开阅读数背后