题面

luogu

Sol

\(sam\)然后树形\(DP\)

当时还不会拓扑排序的我

  1. # include <bits/stdc++.h>
  2. # define IL inline
  3. # define RG register
  4. # define Fill(a, b) memset(a, b, sizeof(a))
  5. using namespace std;
  6. typedef long long ll;
  7. template <class Int>
  8. IL void Input(RG Int &x){
  9. RG int z = 1; RG char c = getchar(); x = 0;
  10. for(; c < '0' || c > '9'; c = getchar()) z = c == '-' ? -1 : 1;
  11. for(; c >= '0' && c <= '9'; c = getchar()) x = (x << 1) + (x << 3) + (c ^ 48);
  12. x *= z;
  13. }
  14. const int maxn(2e6 + 5);
  15. int n, trans[26][maxn], fa[maxn], len[maxn], tot = 1, last = 1, size[maxn];
  16. ll ans;
  17. vector <int> edge[maxn];
  18. char s[maxn];
  19. IL void Extend(RG int c){
  20. RG int np = ++tot, p = last; last = np;
  21. len[np] = len[p] + 1, size[np] = 1;
  22. while(p && !trans[c][p]) trans[c][p] = np, p = fa[p];
  23. if(!p) fa[np] = 1;
  24. else{
  25. RG int q = trans[c][p];
  26. if(len[p] + 1 == len[q]) fa[np] = q;
  27. else{
  28. RG int nq = ++tot;
  29. len[nq] = len[p] + 1, fa[nq] = fa[q];
  30. for(RG int i = 0; i < 26; ++i) trans[i][nq] = trans[i][q];
  31. fa[q] = fa[np] = nq;
  32. while(p && trans[c][p] == q) trans[c][p] = nq, p = fa[p];
  33. }
  34. }
  35. }
  36. IL void Dfs(RG int x){
  37. for(RG int l = edge[x].size(), e = 0; e < l; ++e)
  38. Dfs(edge[x][e]), size[x] += size[edge[x][e]];
  39. if(size[x] != 1) ans = max(ans, 1LL * size[x] * len[x]);
  40. }
  41. int main(RG int argc, RG char* argv[]){
  42. scanf(" %s", s), n = strlen(s);
  43. for(RG int i = 0; i < n; ++i) Extend(s[i] - 'a');
  44. for(RG int i = 2; i <= tot; ++i) edge[fa[i]].push_back(i);
  45. Dfs(1);
  46. printf("%lld\n", ans);
  47. return 0;
  48. }

Luogu3804:[模板]后缀自动机的更多相关文章

  1. [模板] 后缀自动机&&后缀树

    后缀自动机 后缀自动机是一种确定性有限状态自动机, 它可以接收字符串\(s\)的所有后缀. 构造, 性质 翻译自毛子俄罗斯神仙的博客, 讲的很好 后缀自动机详解 - DZYO的博客 - CSDN博客 ...

  2. 洛谷 P3804 [模板] 后缀自动机

    题目:https://www.luogu.org/problemnew/show/P3804 模仿了一篇题解,感觉很好写啊. 代码如下: #include<cstdio> #include ...

  3. 【Luogu3804】【模板】后缀自动机(后缀自动机)

    [Luogu3804][模板]后缀自动机(后缀自动机) 题面 洛谷 题解 一个串的出现次数等于\(right/endpos\)集合的大小 而这个集合的大小等于所有\(parent\)树上儿子的大小 这 ...

  4. Luogu3804 【模板】后缀自动机

    题面 题解 一个串的出现次数等于$endpos$的大小,也是$parent$树上节点的$size$大小, 构建出后缀自动机,按拓补序,模拟即可. 代码 #include<cstdio> # ...

  5. 字符串数据结构模板/题单(后缀数组,后缀自动机,LCP,后缀平衡树,回文自动机)

    模板 后缀数组 #include<bits/stdc++.h> #define R register int using namespace std; const int N=1e6+9; ...

  6. P3804 【模板】后缀自动机

    P3804 [模板]后缀自动机 后缀自动机模板 详情可见luogu题解板块 #include<iostream> #include<cstdio> #include<cs ...

  7. 2018.07.17 后缀自动机模板(SAM)

    洛谷传送门 这是一道后缀自动机的模板题,这道题让我切身体会到了后缀自动机的方便与好写. 代码如下: #include<bits/stdc++.h> #define N 2000005 #d ...

  8. 牛客网 桂林电子科技大学第三届ACM程序设计竞赛 A.串串-后缀自动机模板题

    链接:https://ac.nowcoder.com/acm/contest/558/A来源:牛客网 A.串串 小猫在研究字符串. 小猫在研究字串. 给定一个长度为N的字符串S,问所有它的子串Sl…r ...

  9. SPOJ 8222. Substrings(后缀自动机模板)

    后缀自动机+dp. 后缀自动机主要是在functioner大牛那里学习的:http://blog.sina.com.cn/s/blog_70811e1a01014dkz.html 这道题是在No_st ...

随机推荐

  1. 从源码的角度再学「Thread」

    前言 Java中的线程是使用Thread类实现的,Thread在初学Java的时候就学过了,也在实践中用过,不过一直没从源码的角度去看过它的实现,今天从源码的角度出发,再次学习Java Thread, ...

  2. collections 模块常用方法学习

    前情提要: 1:模块介绍 个人认为就是 python自带的骚操作模块.如果基础能力够给力的话,完全用不到 个人认为解析式才是装逼神奇,用模块的都是伪娘 2:deque   双向列表 from coll ...

  3. 编程开发之--java多线程学习总结(6)

    5.测试 package com.lfy.ThreadsSynchronize; public class Test { public static void main(String[] args) ...

  4. apache 子域名自动与子域名同名的目录绑定

    假设有域名domain.com,已经泛解析子域名*.domain.com到该主机的ip,web根目录为/var/www/,在访问a.domain.com时,能自动绑定/var/www/a/目录,访问b ...

  5. 【算法笔记】A1039 Course List for Student

    https://pintia.cn/problem-sets/994805342720868352/problems/994805447855292416 题意: 有N个学生,K节课.给出选择每门课的 ...

  6. remote link Centos6.6 Horrible Slow

    客户端win7 , 本地直连,secureCRT连接Centos6.6 速度巨慢,FTP tool almost cannot link in. 即使用cmd ftp 也是反应30s以上.

  7. [转] Maven 直接下载依赖项 artifact, dependency:get

    [From]http://dnotes.wikidot.com/dependency:get-example To download an artifact into local repository ...

  8. (转)[小工具] Linux下列格式化工具 - column

    当你看到Linux下命令输出的列歪歪扭扭时,是不是看着很不爽?column 命令就可以方便地解决这个问题. 比如: 我们一般就只用到上面这一个用法. column的其他用法如下: 选项 含义 -c 字 ...

  9. Nginx教程(五) Nginx配置文件详解

    一. Nginx配置文件nginx.conf中文详解 #定义Nginx运行的用户和用户组 user www www; #nginx进程数,建议设置为等于CPU总核心数. worker_processe ...

  10. 非科班双非本科投的337家Java后台(励志)

    考试结束,班级平均分只拿到了年级第二,班主任于是问道:大家都知道世界第一高峰珠穆朗玛峰,有人知道世界第二高峰是什么吗?正当班主任要继续发话,只听到角落默默想起来一个声音:”乔戈里峰” 前言 文章出自h ...