题解:

和上一题差不多

每个点记录前面的到这个点的最大值

初值赋为len[i]

然后注意要用子节点更新父节点

代码:

  1. #include <bits/stdc++.h>
  2. #define ll long long
  3. #define rint register int
  4. #define rep(i,h,t) for (rint i=h;i<=t;i++)
  5. #define dep(i,t,h) for (rint i=t;i>=h;i--)
  6. #define me(x) memset(x,0,sizeof(x))
  7. using namespace std;
  8. const int N=3e6;
  9. const int INF=1e9;
  10. char s[N];
  11. int size[N],len[N],ch[N][];
  12. int lst=,node=,t[N],a[N],fa[N],ans[N],ans2[N],num[N];
  13. void extend(int c)
  14. {
  15. int f=lst,p=++node; lst=p;
  16. len[p]=len[f]+; size[p]=;
  17. while (f&&!ch[f][c]) ch[f][c]=p,f=fa[f];
  18. if (!f) { fa[p]=; return;};
  19. int x=ch[f][c],y=++node;
  20. if (len[f]+==len[x]) {fa[p]=x; node--;return;};
  21. len[y]=len[f]+; fa[y]=fa[x]; fa[x]=fa[p]=y;
  22. memcpy(ch[y],ch[x],sizeof(ch[x]));
  23. while (f&&ch[f][c]==x) ch[f][c]=y,f=fa[f];
  24. }
  25. void js()
  26. {
  27. int l=strlen(s),now=,t=;
  28. rep(i,,l)
  29. {
  30. int x=s[i-]-'a';
  31. if (ch[now][x]) now=ch[now][x],++t;
  32. else
  33. {
  34. while (now&&!ch[now][x]) now=fa[now];
  35. if (!now) now=,t=;
  36. else t=len[now]+,now=ch[now][x];
  37. }
  38. ans[now]=max(ans[now],t);
  39. }
  40. }
  41. int main()
  42. {
  43. freopen("1.in","r",stdin);
  44. freopen("1.out","w",stdout);
  45. ios::sync_with_stdio(false);
  46. cin>>s;
  47. int l=strlen(s);
  48. rep(i,,l) extend(s[i-]-'a');
  49. rep(i,,node) t[len[i]]++;
  50. rep(i,,node) t[i]+=t[i-];
  51. rep(i,,node) a[t[len[i]]--]=i;
  52. rep(i,,N-) ans2[i]=len[i];
  53. while (cin>>s)
  54. {
  55. me(ans);
  56. js();
  57. dep(i,node,)
  58. {
  59. int x=a[i];
  60. ans2[x]=min(ans2[x],ans[x]);
  61. ans[fa[x]]=max(ans[fa[x]],ans[x]);
  62. }
  63. }
  64. int maxn=;
  65. rep(i,,node) maxn=max(maxn,ans2[i]);
  66. cout<<maxn<<endl;
  67. return ;
  68. }

SPOJ 1812 LCS2的更多相关文章

  1. spoj 1812 LCS2 - Longest Common Substring II (后缀自己主动机)

    spoj 1812 LCS2 - Longest Common Substring II 题意: 给出最多n个字符串A[1], ..., A[n], 求这n个字符串的最长公共子串. 限制: 1 < ...

  2. spoj 1812 LCS2(SAM+DP)

    [题目链接] http://www.spoj.com/problems/LCS2/en/ [题意] 求若干个串的最长公共子串. [思路] SAM+DP 先拿个串建个SAM,然后用后面的串匹配,每次将所 ...

  3. SPOJ 1812 LCS2 [后缀自动机 DP]

    题意: 求多个串<=10的最长连续子串 一个串建SAM,然后其他串在上面走 每个状态记录所有串在这个状态的公共子串的最小值 一个串在上面走的时候记录与每个状态公共子串的最大值,注意出现次数向父亲 ...

  4. SPOJ 1812 LCS2 - Longest Common Substring II

    思路 后缀自动机求多串的最长公共子串 对第一个建出后缀自动机,其他的在SAM上匹配,更新到一个节点的匹配长度最大值即可,最后对所有最大值取min得到一个节点的答案,对所有节点答案求max即可 然后注意 ...

  5. SPOJ.1812.LCS2(后缀自动机)

    题目链接 \(Description\) 求最多10个串的LCS(最长公共子序列). \(Solution\) 类比上题,对一个串建SAM,我们可以逐串地求出其在每个节点所能匹配的最大长度mx[i]. ...

  6. 【刷题】SPOJ 1812 LCS2 - Longest Common Substring II

    A string is finite sequence of characters over a non-empty finite set Σ. In this problem, Σ is the s ...

  7. SPOJ 1812 LCS2 - Longest Common Substring II (后缀自动机、状压DP)

    手动博客搬家: 本文发表于20181217 23:54:35, 原地址https://blog.csdn.net/suncongbo/article/details/85058680 人生第一道后缀自 ...

  8. spoj 1812 lcsII (后缀自动机)

    spoj 1812 lcsII (后缀自动机) 题意:求多个串的lcs,最多10个串,每个串最长10w 解题思路:后缀自动机.先建好第一个串的sam,然后后面的串拿上去跑(这个过程同前一题).sam上 ...

  9. SPOJ 1812 Longest Common Substring II(后缀自动机)(LCS2)

    A string is finite sequence of characters over a non-empty finite set Σ. In this problem, Σ is the s ...

随机推荐

  1. requests库入门04-http基本认证

    因为后续样例中GitHub都需要提供认证,所以先写关于基本认证的 http的请求中,有一些请求是需要通过授权认证之后才会响应,授权认证就是检查用户名和密码的过程.http有一个基本认证方式,在认证的过 ...

  2. linux 系统进程理解

    1.为了对进程从产生到消亡的整个过程进行跟踪和描述,就需要定义各种进程的各种状态并制定相应的状态转换策略,以此来控制进程的运行.      不同的操作系统对进程的状态解释不同,但是最基本的状态都是一样 ...

  3. 008_falcon磁盘io计算方法

    一.falcon磁盘IO告警计算方法 (1)线上告警示例 [falcon]环境: prod 时间: 2018-11-10 22:29 共1条 [#主机磁盘io过高(appid)]主机hostname磁 ...

  4. 029_mount bind挂载

    一. 由于公司的配置标准并不统一,交付的磁盘挂载的路径不是想要的路径,但是 1./home目录下有很重要的堡垒机登录的相关文件,还不能卸载 2.我通过pts/0登录的,这个文件描述符也是在/home目 ...

  5. UDP/TCP拾遗

    1.UDP的特点 (1)UDP 是无连接的,即发送数据之前不需要建立连接. (2)UDP 使用尽最大努力交付,即不保证可靠交付,同时也不使用拥塞控制. (3)UDP 是面向报文的.UDP 没有拥塞控制 ...

  6. ls 命令

    命令: ls 对应英文: list 作用: 查看当前文件夹下的内容 选项: -a 查看隐藏文件, 文件名前带 . 号的文件 -l 以详细列表形式显示 -h 人性化方式显示文件大小(注:-h必须和-l同 ...

  7. 解决layui选中项下一页清空问题

    项目中遇到给用户在所有产品中匹配一部分产品.用layui 第一页选好之后到第二页再选,等回到第一页时之前选择的都没了,解决这个问题的办法如下: //勾选的产品id集合 var chooseAdids ...

  8. Spring Cloud源码分析(四)Zuul:核心过滤器

    通过之前发布的<Spring Cloud构建微服务架构(五)服务网关>一文,相信大家对于Spring Cloud Zuul已经有了一个基础的认识.通过前文的介绍,我们对于Zuul的第一印象 ...

  9. css 样式 记录

    /* Track */::-webkit-scrollbar-track { -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3); -webkit-bo ...

  10. Android&Java面试题大全—金九银十面试必备

    声明本文由作者:Man不经心授权转载,转载请联系原文作者原文链接:https://www.jianshu.com/p/375ad14096b3, 类加载过程 Java 中类加载分为 3 个步骤:加载. ...