#define maxnode 60101#define sigma_size 26struct trie{ int ch[maxnode][sigma_size]; int val[maxnode]; int sz; void init() { cler(ch[0],0); sz=1; } int newnode() { cler(ch[sz],0); val[sz]=0; return sz++; } int idx(char s) { return s-'a'; } void insert(char *s) { int u=0,len=strlen(s); for(int i=0;i
last数组储存着失配指针上的单词结尾的结点编号
#define maxnode 500101#define sigma_size 26struct trie{ int ch[maxnode][sigma_size]; int val[maxnode]; int fail[maxnode]; int last[maxnode]; int sz; void init() { cler(ch[0],0); cler(last,0); cler(fail,0); sz=1; } int newnode() { cler(ch[sz],0); val[sz]=0; return sz++; } int idx(char s) { return s-'a'; } void insert(char *s) { int u=0,len=strlen(s); for(int i=0;i