應用模板,對模板有更深入的理解。
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 ...