AC自动机模板
2015-02-03 19:46
211 查看
<pre>const int maxn = 500005; const int N = 26; //儿子节点个数,根据题意调整 class ACAutomato { private: int chd[maxn] ; int key[maxn]; int fail[maxn]; int Q[maxn]; int ID[128]; int sz; public: void init() { sz = 1, fail[0] = 0; memset(chd[0], 0, sizeof(chd[0])); for(int i = 0;i < N; i++) ID[i + ' '] = i; } //将权值为val的字符串a插入到trie中 void insert(char *s, int val) { int p = 0; for (; *s; s++) { int c = ID[*s]; if (!chd[p][c]) { memset (chd[sz], 0, sizeof(chd[sz])); key[sz] = 0; chd[p][c] = sz++; } p = chd[p][c]; } key[p] = val; } //构建AC自动机,确定每个节点的权值以及状态转移 void build_ac() { int i, *s = Q, *e = Q; for (i = 0; i < N; i++) if (chd[0][i]) { *e++ = chd[0][i]; fail[chd[0][i]] = 0; } while (s != e) { int u = *s++; for (i = 0; i < N; i++) { int &v = chd[u][i]; if (v) { fail[v] = chd[fail[u]][i]; //以下一行代码要根据题目所给val的含义来写 key[v] |= key[fail[v]]; *e++ = v; } else v = chd[fail[u]][i]; } } } }AC;
相关文章推荐
- Match:Keywords Search(AC自动机模板)(HDU 2222)
- hdu 2222(AC自动机模板)
- 模板——AC自动机
- AC自动机模板
- HDU2222 Keywords Search 【AC自动机模板题】
- HDU 2222 Keywords Search(AC自动机模板)
- hdu 1277 全文检索(ac自动机模板)
- HDOJ 2222.Keywords Search(AC自动机模板)
- [AC自动机模板题] HDU 2222 Keywords Search
- AC自动机算法及模板
- AC自动机 ( 模板题啊 )——Dominating Patterns ( UVA 4670 )
- HDU2222 AC自动机 入门模板
- [模板]-AC自动机
- HDU2222 AC自动机模板
- AC自动机模板(hdu2222)
- AC自动机算法及模板
- AC自动机模板
- HDU 2222 ac自动机入门模板题
- HDU2222 Keywords Search(AC自动机模板)
- 【AC自动机】HDU中模板题