日韩性视频-久久久蜜桃-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图 + 拓扑排序的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 亚洲三级影院 | 精品盗摄一区二区三区 | 久久久人人爽 | 国产视频中文字幕 | 日韩精品一区二区免费视频 | 国产一区二区视频在线播放 | 亚洲图片小说视频 | 日韩脚交footjobhd | 亚洲欧美日韩精品在线 | 少妇1~3伦理| 伊人久久五月天 | tube日本69第一次 | 91免费国产视频 | 黄色大片儿 | 日韩激情第一页 | 手机在线亚洲 | 国产自产精品 | 成年免费在线观看 | 日本精品视频在线 | 国产大片av | 九九九九热 | 国产大片一区二区 | 一本久 | 一本久久精品一区二区 | 日本免费电影一区二区三区 | 小柔的淫辱日记(h | 理论片午午伦夜理片影院99 | 午夜伦理剧场 | 99精品视频一区二区三区 | 国产精品腿扒开做爽爽爽挤奶网站 | 久久艹在线视频 | 91精品国产综合久久久蜜臀粉嫩 | 少妇扒开粉嫩小泬视频 | 日韩色网 | 日本免费a级片 | 桥本有菜aⅴ一区二区三区 在线午夜电影 | 久久国产成人精品国产成人亚洲 | 男人天堂视频网站 | 国产做爰xxxⅹ高潮视频12p | 丁香美女社区 | 国产酒店自拍 | 日本不卡一区 | 久久撸视频 | 国产高清视频在线观看 | 在线视频日韩欧美 | 91国产视频在线观看 | 欧美videos另类极品 | av免费福利 | 波多野结衣中文在线 | 可以免费看黄的网站 | 欧美你懂得 | 亚洲精品色图 | 欧美一区二区三区四区五区 | 在线观看成年人视频 | 国产拍拍拍拍拍拍拍拍拍拍拍拍拍 | 影音先锋在线视频观看 | 国产成人综合自拍 | av日韩精品| 美女黄色录像 | 欧美成人手机在线 | 亚洲欧美网站 | wwwjizzzcom| 日韩精品二区在线观看 | 91sex国产 | 视频黄页在线观看 | 国产欧美视频一区二区 | 插久久| 看毛片网 | 日韩免费av在线 | 久久午夜鲁丝 | 在线天堂中文在线资源网 | 日韩激情中文字幕 | 国产第九页 | www.青青草.com| 国语对白一区二区 | 天堂av2020 | 国产中文视频 | 国产成人一区二区三区影院在线 | 午夜影片 | 亚洲性网站 | 魔女鞋交玉足榨精调教 | 好吊色在线视频 | 国产亚洲色婷婷久久99精品 | 丝袜 亚洲 另类 欧美 重口 | 精品乱码一区内射人妻无码 | 成人午夜av在线 | 中文字幕观看av | 欧美乱淫| 中文字幕一区二区三区在线视频 | 美日韩一区二区 | 一级黄色录像大片 | 性xxxx欧美老肥妇牲乱 | 日批免费观看 | wwxx日本 | 一区二区视频国产 | 免费视频福利 | 成人黄色在线观看视频 | 久久r精品 | 亚洲制服在线观看 |