【題目鏈結】
【題意】
給定 n個字串 s1~sn,要求找到乙個最短的字串 t,使得這 n個字串都是 t的子串。
【題解】
類似於搜尋+二進位制記錄狀態的題目
搜尋時利用bfs來跑,每乙個結點的位置都可以用狀態陣列存起來,
判斷是否為 (1在輸出答案時需要遞迴實現,所以要乙個輔助陣列fa來記錄上乙個結點的位置。
1 #include2 #include3 #include4 #include5view codeusing
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*/
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樹上,我們肯定需要遍歷每乙個節點,那麼我們可以對每乙個單詞的結尾進行...