Luogu3804:[模板]后缀自动机
2024-09-02 05:18:59
题面
Sol
\(sam\)然后树形\(DP\)
当时还不会拓扑排序的我
# include <bits/stdc++.h>
# define IL inline
# define RG register
# define Fill(a, b) memset(a, b, sizeof(a))
using namespace std;
typedef long long ll;
template <class Int>
IL void Input(RG Int &x){
RG int z = 1; RG char c = getchar(); x = 0;
for(; c < '0' || c > '9'; c = getchar()) z = c == '-' ? -1 : 1;
for(; c >= '0' && c <= '9'; c = getchar()) x = (x << 1) + (x << 3) + (c ^ 48);
x *= z;
}
const int maxn(2e6 + 5);
int n, trans[26][maxn], fa[maxn], len[maxn], tot = 1, last = 1, size[maxn];
ll ans;
vector <int> edge[maxn];
char s[maxn];
IL void Extend(RG int c){
RG int np = ++tot, p = last; last = np;
len[np] = len[p] + 1, size[np] = 1;
while(p && !trans[c][p]) trans[c][p] = np, p = fa[p];
if(!p) fa[np] = 1;
else{
RG int q = trans[c][p];
if(len[p] + 1 == len[q]) fa[np] = q;
else{
RG int nq = ++tot;
len[nq] = len[p] + 1, fa[nq] = fa[q];
for(RG int i = 0; i < 26; ++i) trans[i][nq] = trans[i][q];
fa[q] = fa[np] = nq;
while(p && trans[c][p] == q) trans[c][p] = nq, p = fa[p];
}
}
}
IL void Dfs(RG int x){
for(RG int l = edge[x].size(), e = 0; e < l; ++e)
Dfs(edge[x][e]), size[x] += size[edge[x][e]];
if(size[x] != 1) ans = max(ans, 1LL * size[x] * len[x]);
}
int main(RG int argc, RG char* argv[]){
scanf(" %s", s), n = strlen(s);
for(RG int i = 0; i < n; ++i) Extend(s[i] - 'a');
for(RG int i = 2; i <= tot; ++i) edge[fa[i]].push_back(i);
Dfs(1);
printf("%lld\n", ans);
return 0;
}
最新文章
- C++ Primer Pluse_6_课后题
- 15款开源PHP类库
- opencl初探-sobel检测
- 使用行为树(Behavior Tree)实现网游奖励掉落系统
- CentOS 7 安装和配置JDK
- Plugin For KanColleViewer – Provissy Tools V1.0
- ReentrantLock获取、释放锁的过程
- 关于移动APP与Web APP的测试重点以及区别
- Web前端文件上传进度的显示
- 分布式锁与实现(一)——基于Redis实现 【比较靠谱】
- Elasticsearch系列(2):安装Elasticsearch(Linux环境)
- Mirror--如何对运行中的镜像端点更换证书
- 51Nod 1091 线段的重叠(贪心+区间相关
- H5 高德地图获取当前位置信息
- matplotlib + pandas绘图
- Python初学者第十二天 购物车程序小作业
- 【iOS开发之Objective-C】书签管理器项目
- Ceph介绍
- mysql之约束以及修改数据表
- 基于Qt搭建ROS开发环境
热门文章
- Ambiguous mapping found. Cannot map &#39;XXXController&#39; bean method
- 晦涩难懂的shell命令
- TX2 之tensorflow环境部署
- 函数直接写在html页面的<;script>;里可以调用,但是单独放在js文件里不能调用
- python全栈开发_day13_迭代器和生成器
- [转] Actor生命周期理解
- 使用webpack &;&; react环境
- smarty 教程 及 常用点
- DiagnosticFormatter
- 【Qt开发】QTime类