病毒 POI2000 AC自動機 搜尋

2022-05-11 15:58:20 字數 1046 閱讀 8448

我們假設已經有乙個無限長的串滿足要求,那如果我們拿它去匹配會發生什麼?

它會一直在ac自動機上轉圈,一定經過根節點且不會經過病毒字串結束的節點。

所以如果我們能找到乙個環滿足「一定經過根節點且不會經過病毒字串結束的節點」,那麼就可以找到乙個無限長的串。

我們可以用dfs找環。

#include #include 

#include

#include

#include

using

namespace

std;

int trie[30010][2], fail[30010], tot = 1

;int

n;bool end[30010], vis[30010], mark[30010

], ans;

char s[30010

];queue

q;void solve(int

x)

if (vis[x] || end[x]) return

; vis[x] = 1

; mark[x] = 1

;

if (trie[x][0]) solve(trie[x][0

]);

if (trie[x][1]) solve(trie[x][1

]); mark[x] = 0;}

intmain()

end[p] = 1

; }

for (int i = 0; i < 2; i++) trie[0][i] = 1

; fail[

1] = 0

; q.push(1);

while (!q.empty())

else}}

solve(1);

if (ans) puts("

tak"

);

else puts("

nie"

);

return0;

}

AC自動機 POI2000病毒

題意 給你一些字串,問能不能找到乙個無限長的字串,使得給定的這些字串不會出現在該無限長字串中 一般我們寫ac自動機都是盡可能的使多匹配,而本題反其道而行,要盡可能的不匹配,那麼我們可以遇到fail標記就跳 因為乙個字串的標記是在最後,中途就調走了肯定就不會遇到了 如果存在乙個無限長的字串,那麼我們內...

POI2000 病毒 AC自動機,簡單環搜尋

判斷是否能夠構建乙個 資料範圍 涉及多個串的匹配,可以考慮使用給定串的匹配.而該題要求我們構建符合條件的串.這裡就涉及乙個對樹構建成圖.由於要構建不含給定串,故對每個給定串終止位打上標記.這裡要注意 如果每個結點指向它的結點 如果我們能夠在圖上找到乙個符合條件的環,那麼就可以構建無限長的目標串.in...

AC自動機(病毒侵襲 )

題目大意 中文題目 具體思路 ac自動機模板題,編號的時候注意,是按照給定的id進行編號的。然後輸出的時候注意去重,雖然按道理來講通過last陣列是不會有重複的,但是如果是這種情況,病毒模板aaa,然後給你乙個模板串aaaaa,這樣的話,就肯定會有重複的了,所以需要去重,其次輸出的時候按照公升序輸出...