void getfail() {
queue<int> q;
for (int i = 0; i < 26; i++) {
if (AC[0].son[i]) {
AC[AC[0].son[i]].fail = 0;
q.push(AC[0].son[i]);
}
}
while (q.size()) {
int x = q.front();
q.pop();
for (int i = 0; i < 26; i++) {
if (AC[x].son[i]) {
AC[AC[x].son[x]].fail = AC[AC[x].fail].son[i];
q.push(AC[x].son[x]);
}
else
AC[x].son[i] = AC[AC[x].fail].son[i];
}
}
}
AC[x].son[i] = AC[AC[x].fail].son[i];
这个是为什么