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

2021-08-29 20:17:12 字數 995 閱讀 7973

判斷是否能夠構建乙個

資料範圍:

涉及多個串的匹配,可以考慮使用給定串的匹配.而該題要求我們構建符合條件的串.

這裡就涉及乙個對構建成.

由於要構建不含給定串,故對每個給定串終止位打上標記.

這裡要注意:如果每個結點指向它的結點

如果我們能夠在上找到乙個符合條件的環,那麼就可以構建無限長的目標串.

#include #include #include #include #include using namespace std;

struct trie trie[5000005];

int cnt_trie;

void insert(char *s);

void getfail();

bool flag;

bool vis[500005];

void dfs(int);

int n;

char s[30005];

int main()

getfail();

dfs(0);

if(flag) printf("tak\n");

else printf("nie\n");

return 0;

}void dfs(int u)

int i;

vis[u] = true;

for(i = 0; i < 2; i++)

vis[u] = false;

}void insert(char *s)

trie[root].virus = true;

}void getfail()

else

trie[u].next[i] = trie[trie[u].fail].next[i];}}}

AC自動機 POI2000病毒

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

病毒 POI2000 AC自動機 搜尋

我們假設已經有乙個無限長的串滿足要求,那如果我們拿它去匹配會發生什麼?它會一直在ac自動機上轉圈,一定經過根節點且不會經過病毒字串結束的節點。所以如果我們能找到乙個環滿足 一定經過根節點且不會經過病毒字串結束的節點 那麼就可以找到乙個無限長的串。我們可以用dfs找環。include include ...

AC自動機(病毒侵襲 )

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