AC自动机模板
2014-04-17 09:53
344 查看
看了别人写的AC自动机,瞬时觉得自己写的好难看,于是决定改写一下,贴一下模板,以后备用
#define maxn 220000 #define ll long long int n, m; struct Trie{ Trie *fail, *go[26]; bool ter; void init(){ memset(go, 0, sizeof(go)); fail = NULL; ter = false; } }pool[maxn], *root; int tot; void insert(char *c){ int len = strlen(c); Trie *p = root; for (int i = 0; i < len; i++){ if (p->go[c[i] - 'a'] != 0) p = p->go[c[i] - 'a']; else{ pool[tot].init(); p->go[c[i] - 'a'] = &pool[tot++]; p = p->go[c[i] - 'a']; } } p->ter = true; } void getFail() { queue<Trie*> que; root->fail = root; for (int i = 0; i < 26; i++){ if (root->go[i]) { que.push(root->go[i]); root->go[i]->fail = root; } else{ root->go[i] = root; } } while (!que.empty()){ Trie *p = que.front(); que.pop(); for (int i = 0; i < 26; i++){ if (p->go[i]){ que.push(p->go[i]); p->go[i]->fail = p->fail->go[i]; p->go[i]->ter |= p->go[i]->fail->ter; } else{ p->go[i] = p->fail->go[i]; } } } }
相关文章推荐
- 【洛谷】3808 【模板】AC自动机(简单版)
- AC自动机模板
- AC自动机模板
- HDU2896,ac自动机模板题
- AC自动机模板先存着,还不会...
- AC自动机 ( 模板题啊 )——病毒侵袭持续中 ( HDU 3065 )
- hdu 2222 ac自动机入门题 可以做模板
- ac自动机模板
- AC自动机 模板与简单讲解 模板题:贴瓷砖
- 【模板练习——AC自动机】Keywords Search HDU - 2222
- 【BZOJ3172】【Tjoi2013】单词 AC自动机模板题
- hdu 2222 AC自动机模板题
- hdu 2222 ac自动机模板题
- Trie树、AC自动机模板
- AC自动机模板【洛谷3796】
- HDU 2222 Keywords Search(AC自动机 模板)
- HDU 2222 Keywords Search(AC自动机模板)
- 【洛谷P3796】【模板】AC自动机(加强版)
- LA 4670 (AC自动机 模板题) Dominating Patterns
- AC自动机以及KMP模板