AC自動機 最短母串

2022-06-20 00:57:08 字數 1176 閱讀 9692

【題目鏈結】

【題意】

給定 n個字串 s1~sn,要求找到乙個最短的字串 t,使得這 n個字串都是 t的子串。

【題解】

類似於搜尋+二進位制記錄狀態的題目

搜尋時利用bfs來跑,每乙個結點的位置都可以用狀態陣列存起來,

判斷是否為 (1在輸出答案時需要遞迴實現,所以要乙個輔助陣列fa來記錄上乙個結點的位置。

1 #include2 #include3 #include4 #include5

using

namespace

std;

6const

int n = 6e3+5;7

const

int m = 2e6+50;8

const

int str_n = 605;9

int trie[n][26

],fail[n],end[n];

10int

vis[n][str_n];

11int

q[m],st[m];

12int

fa[m];

13char

str[m];

14int

head,tail;

15int

n,idx;

16char

str[str_n];

17void print(int

x)22

void insert( char s , int

id )

30 end[p] |= (1

<

32void

build()40}

4142

while( head <=tail )else54}

55}56}

57void

solve()80}

81}82}

83int

main()

8490

build();

91solve();

92return0;

93}9495

/*96*97

498hnoi

99noip

100noi

101ioi

102103

hnoipioi

104*/

view code

AC自動機 建立nlogn個AC自動機

string set queries 題意 給你3種操作,1 加入乙個串到集合中。2 刪除集合中的某乙個串 3 查詢集合中的字串在給定的字串種出現幾次。同乙個串可重複 解法 建立多個ac自動機,用二進位制分組來處理。加入給你21個串 分為 16 4 1,再新增乙個串的時候,即21 1,22 16 4...

AC自動機及字尾自動機

ac自動機是一種基於trie樹的演算法,其本質和kmp上的處理很相似。trie樹結構 kmp轉移思路 ac自動機組要由三個部分組成 trie樹的建立 fail指標的匹配 對ac自動機的詢問 每次建立自動機會有一次初始化 ac自動機類 struct node node結構體 struct ac voi...

洛谷 P2322 最短母串問題 狀壓 AC自動機

題目大意 給你n個串,讓你求包含這n個串的最短母串 首先,看到多串,就大概知道要用ac自動機了。然後再想,我們怎麼將每個串加入到我們所求的母串上面去。雖然n 12,但是我們無法對每一種情況進行dfs,所以這種想法需要拋棄。在trie樹上,我們肯定需要遍歷每乙個節點,那麼我們可以對每乙個單詞的結尾進行...