题解:
找多个字符串的最长公共后缀并且这个后缀是某个串的前缀,看到前缀后缀和多个串的时候就想到了ac自动机,把fail树建立之后找每个地区的lca,在跑fail树的时候就处理出每个节点的res值。
#include <bits/stdc++.h>
//#define int long long
using namespace std;
typedef long long ll;
const int N=1e6+10;
const int M=1e5+10;
const int mod=1e9+7;
vector<int> g[M];
int head[N],e[N],ne[N],idx;
void add(int a,int b)
{
e[++idx]=b,ne[idx]=head[a],head[a]=idx;
}
int res[N];
struct Trie{
int next[N][26], fail[N], end[N];
int dep[N], dp[N][22];
int root, L;
int newnode(){
for (int i = 0; i < 26; i++){
next[L][i] = -1;
}
end[L++] = 0;
return L - 1;
}
void init(){
L = 0;
root = newnode();
}
void insert(char buf[],int x){
int len =