AC自动机
BZOJ题目传送门
洛谷题目传送门
不得不说fail树太神奇了。
每次插入一个单词时把所有路径上的点都+1,每个单词的出现次数就是其结尾节点的fail树子树和。因为其fail指针指向的节点一定包含当前字符串。
统计贡献时要从下往上加,所以最好BFS的时候保存其BFS序后倒着搞。
代码:
#include<queue>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 1000005
using namespace std;
int n,nd,t[N][26],nxt[N],f[N]