搬运一个博主的图(懒得画图了) 简单标记了一下ans[],和代码对应
可以看一下我主页,还有相关的字典树的求解
const int N = 2e3 + 10,T = 20;
struct Node
{
int son[26];
}t[N * 80];
int n;
string s;
int idx;
LL ans[N];//以i结尾的单词个数
void insert(string s)
{
int o = 0;
for (int i = 0;i < s.size();i ++)
{
int y = s[i] - 'a';
int &u = t[o].son[y];
if (!u) u = ++idx;
o = u;
}
ans[o] ++;//以o结尾的单词数++
}
void find(int o)
{
//暴力全搜一遍字典树
for (int i = 0;i < 26;i ++)
{
if (t[o].son[i])
{
ans[t[o].son[i]] += ans[o];
find(t[o].son[i]);
}
}
}
void solve()
{
cin >> n;
for (int i = 1;i <= n; i++)
{
cin >> s;
insert(s);
}
find(0);
LL res = 0;
for (int i = 1;i < N;i ++) res = max(res,ans[i]);
cout << res << endl;
}