因为有重复,结点用vector保存单词编号。
#include<iostream> #include<vector> #include<queue> #include<stdio.h> #include<stdlib.h> #include<string.h> #include<algorithm> using namespace std; const int MAX_NODE=15000; const int SIGMA_SIZE=26; struct ACAutomation { int sz; int ch[MAX_NODE][SIGMA_SIZE]; int fail[MAX_NODE]; vector<int> val[MAX_NODE]; void init() { sz=1; memset(ch[0],0,sizeof(ch[0])); val[0].clear(); } int idx(char c){return c-'a';} void insert(const char *s,int v) { int u=0; for(int i=0;s[i]!='