日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2024/9/5 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【BZOJ-2938】病毒 Trie图 + 拓扑排序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2938: [Poi2000]病毒

Time Limit:?1 Sec??Memory Limit:?128 MB
Submit:?609??Solved:?318
[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

HINT

Source

Solution

Trie圖的一大經典應用。

要構造一個無限長的安全串,顯然是需要找至少一個安全的子串,然后循環下去,問題在于是否存在這樣的子串。

建出Trie圖之后,滿足條件的子串必須在Trie圖上不斷匹配,而且不斷失配無法達到危險節點。

這就說明,Trie圖中存在不經過危險節點的環! 然后進行拓撲排序即可。

Code

#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<queue> using namespace std; #define MAXN 30010 int N; char s[MAXN]; struct EdgeNode{int next,to;}edge[MAXN<<1]; int head[MAXN],cnt=1,d[MAXN],visit[MAXN]; inline void AddEdge(int u,int v) {cnt++; edge[cnt].next=head[u]; head[u]=cnt; edge[cnt].to=v;} inline void InsertEdge(int u,int v) {AddEdge(u,v); d[v]++; /*printf("%d ---> %d\n",u,v);*/} namespace ACMachine {#define id(s) s-'0'int son[MAXN][2],end[MAXN],sz=1,fail[MAXN];inline void Insert(char str[]){int len=strlen(str+1),now=1;for (int i=1; i<=len; i++)if (son[now][id(str[i])]) now=son[now][id(str[i])];else son[now][id(str[i])]=++sz,now=sz;end[now]=1;}inline void Getfail(){queue<int>q; q.push(1);while (!q.empty()){int now=q.front(); q.pop(); end[now]|=end[fail[now]];for (int i=0; i<=1; i++){int fa=fail[now];while (fa && !son[fa][i]) fa=fail[fa];if (son[now][i]) fail[son[now][i]]=fa? son[fa][i]:1,q.push(son[now][i]);else son[now][i]=fa? son[fa][i]:1;}}} } using namespace ACMachine; inline bool Topo() {queue<int>q;int sum=0;for (int i=1; i<=sz; i++){if (end[i]) sum++; elsefor (int j=0; j<=1; j++)if (!end[son[i][j]]) InsertEdge(i,son[i][j]);}for (int i=1; i<=sz; i++) if (!d[i] && !end[i]) q.push(i);while (!q.empty()){int now=q.front(); q.pop(); sum++;for (int i=head[now]; i; i=edge[i].next)if (!--d[edge[i].to]) q.push(edge[i].to);}return sum==sz; } int main() {scanf("%d",&N);for (int i=1; i<=N; i++) scanf("%s",s+1),Insert(s);Getfail();if (Topo()) puts("NIE"); else puts("TAK");return 0; }

?

轉載于:https://www.cnblogs.com/DaD3zZ-Beyonder/p/6139083.html

總結

以上是生活随笔為你收集整理的【BZOJ-2938】病毒 Trie图 + 拓扑排序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产精品高清在线观看 | 肥婆大荫蒂欧美另类 | 男人深夜网站 | 在线国产毛片 | 强迫凌虐淫辱の牝奴在线观看 | 91丝袜| 久久久久久av无码免费网站下载 | 欧美高清x | 荫蒂被男人添免费视频 | 欧美一区二区三区免费在线观看 | 黄色一级在线 | 福利电影一区二区 | 日本一本在线视频 | 激情亚洲色图 | 密桃av在线 | 日本视频在线免费观看 | 秋霞精品 | 超碰91在线观看 | 久草三级 | 国产又粗又黄又爽又硬的视频 | 三级全黄做爰在线观看 | 狠狠成人| 国语播放老妇呻吟对白 | 中文字幕精品一区二区精 | 最好看的中文字幕国语电影mv | 日本中文字幕网站 | 亚洲国产成人精品一区二区三区 | 成人夜色视频 | 久在操| 青娱乐激情 | 九九九久久久久 | a√天堂资源在线 | 美女视频污 | 一区二区麻豆 | 少妇一级淫免费播放 | 一本大道久久 | 亚洲精品911 | 成人av手机在线观看 | 男生舔女生胸 | 色诱av手机版 | 久久久精品影视 | 丝袜人妻一区二区三区 | 六月综合网| 精品国产免费一区二区三区 | 国产国产乱老熟女视频网站97 | 欧美xxxxxhd | 久久发布国产伦子伦精品 | 密臀av在线| 久久精品国产亚洲av麻豆 | 国产精品高潮呻吟视频 | 国产中文字幕二区 | 这里只有精品国产 | 日日操日日| 国产盗摄精品一区二区酒店 | 亚洲专区一区 | 91视频亚洲 | 永久免费未满视频 | 九九视频在线观看 | 依依成人在线 | 国产黄色一级网站 | 久久精品成人 | 久久人久久 | 大陆熟妇丰满多毛xxxⅹ | 国内精品久久久 | 丰满人妻av一区二区三区 | 色版视频在线观看 | 合欢视频在线观看 | 亚洲熟女乱综合一区二区三区 | 久久成人人人人精品欧 | 久久婷婷五月综合色吧 | 最新毛片基地 | 亚洲情侣av | 国产影视一区二区三区 | 国产女人18毛片水真多1 | 激情综合网婷婷 | 欧美一级片网址 | 超碰极品 | 日韩免费精品视频 | 人体写真 福利视频 | jizz欧美大片| 久久精品香蕉 | 18p在线观看| 日本免费黄色片 | 国产农村妇女精品一二区 | 999久久久精品 | 久久新| 日韩视频欧美视频 | 久久久久久久黄色 | 日本公妇乱淫免费视频一区三区 | 国产精品97 | 欧美人妻少妇一区二区三区 | 在线视频免费观看一区 | 国产精品高潮呻吟久久久 | 免费的av片| 色婷五月天| 国内自拍第三页 | 一级理论片 | 国产精品揄拍100视频 | 337p亚洲欧洲色噜噜噜 |