HDU 2222 AC自動機經典題目

2021-06-12 07:50:23 字數 1019 閱讀 5707

應用模板,對模板有更深入的理解。

1.       當前結點的失敗指標

等於 父節點的失敗指標指向的結點的的同個字母兒子結點的指標

2. v = chd[ fail[u] ][i];這句為了別的結點計算敗者指標提供便利。無其他作用。

3. work在結點之間的轉移方式

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

//max_node = stringnumber * stringlength

const int max_node = 500010;

//節點個數,一般字元形式的題26個

const int child_num = 26;

//特定題目需要

char test[1000010];

class acautomaton

} //重新建樹需先reset

void reset()

//將權值為key的字串a插入到trie中

void insert(char *a,int key)

p = chd[p][c];

} val[p]++;

} //建立ac自動機,確定每個節點的權值以及狀態轉移

void construct()

} while (s != e) else

}} }

//解題,特定題目需要

int work()

}return res;

}}ac;

int main()

ac.construct();

scanf("%s", test);

printf("%d\n", ac.work());

} return 0;

}

hdu2222 ac自動機裸題

前幾天講了ac自動機,今天才a了第一道模板題.o o 我還是太弱了 畢竟蒟蒻 問題難度很小,我注釋的很詳細了,應該能懂吧 include include include include include using namespace std int t,tou,tail,n char s 55 s1...

HDU2222(AC自動機模板題)

aho corasick automaton,該演算法在1975年產生於貝爾實驗室,是著名的多模匹配演算法。ac自動機是字典樹和kmp的結合。可以解決的問題 給定多個單詞,再給乙個字串,問有多少個單詞在這個字串中出現過。這個問題可以用kmp挨個串匹配,但是如果單詞數目多的話肯定會超時。數中節點 st...

hdu 2222 ac自動機模版

include include structnode q 1000010 charss 1010 s 55 voidinsert chars,node root p num voidacmove node root p p fail if p null now next i fail root q ...