回文树 Palindromic Tree


嗯。。回文树是个什么东西呢。
回文树(或者说是回文自动机)每个节点代表一个本质不同的回文串。
首先它类似字典树,每个节点有SIGMA个儿子,表示对应的字母。
其次它类似自动机,有一个fail指针,一个节点的fail指针指向这个回文串的最长回文后缀。比如说abbaabba的fail指向abba的最后一个a.
利用回文树,我们可以在线性(不太确定是线性还是\(nlogn\)?)的时间内求出所有本质不同的回文子串,以及以每个字母结尾的最长回文子串。
有一个定理,一个长度为n的串中本质不同的回文子串最多只有n个。本质不同是指子串本身不一样(长度不一样或者有字母不一样)。所以回文树最多有\(O(n)\)个节点。
由于回文的性质,回文树可以在线构造,不用像AC自动机那样必须离线构造。


BZOJ 3676
求一个串中,本质不同的回文子串,(出现的次数*长度)的最大值。

直接构造回文树对每个节点记录\(cnt[i]*len[i]\).


BZOJ 2565
求一个串的最长双回文子串,双回文子串可以分成连续的两部分,两部分都是回文串。

构造回文树,对原串统计以位置i结束的最长回文串的\(len[i]+len[i-len[i]]\)的最大值
注意要把原串正反分别搞两次。这就保证了我们对每个点只统计最长回文串就可以。
因为一个最长的双回文子串要么前一半是最长的,要么后一半是最长的,否则可以变得更长。


BZOJ 2160
对所有的偶回文串,统计最长的前k个的长度乘积。

直接构造回文树,每个节点代表着一个本质不同的回文串,排序统计一下即可


codeforces 17E
求一个串中所有相交的回文串的对数。包含算相交
hdu 5157
差不多一个意思

正难则反。相交的不好求我们求不相交的。正反分别扫一边,构造回文树,第一遍记录从某个点开始的回文串数量和,第二遍动态更新答案。\(\Sigma (到i之前为止的回文串*从i+1之后开始的回文串)\)就是所有不相交的回文串对数。总数减去不相交的就是相交的。


URAL 1960
一个串,每次添加一个字母,问这次添加后本质不同的回文串个数。

直接构造回文树,回文树的节点数-2就是本质不同的回文串个数。(因为有两个空节点0和-1)
回文树的一个节点就代表一个本质不同的回文串


codeforces gym 100548G
2014 西安现场赛
求两个字符串的公共回文子串个数

两个串分别建两棵回文树,进行两次dfs(分别从0和-1开始)。每次同时在两棵树上走相同的字母节点,如果能走的通答案就加上\(T1.cnt[x]*T2.cnt[y]\).

因为回文树的形态实际上表示的是回文串自身的结构,如果两棵回文树有长得一样的部分,证明对应的两个串有公共回文子串。


其余题目待补充

回文树 Palindromic Tree的更多相关文章

  1. Palindromic Tree 回文自动机-回文树 例题+讲解

    回文树,也叫回文自动机,是2014年被西伯利亚民族发明的,其功能如下: 1.求前缀字符串中的本质不同的回文串种类 2.求每个本质不同回文串的个数 3.以下标i为结尾的回文串个数/种类 4.每个本质不同 ...

  2. ZOJ 3661 Palindromic Substring(回文树)

    Palindromic Substring Time Limit: 10 Seconds      Memory Limit: 65536 KB In the kingdom of string, p ...

  3. HDU 5658 CA Loves Palindromic(回文树)

    CA Loves Palindromic Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/O ...

  4. HDU5658:CA Loves Palindromic (回文树,求区间本质不同的回文串数)

    CA loves strings, especially loves the palindrome strings. One day he gets a string, he wants to kno ...

  5. 回文树&后缀自动机&后缀数组

    KMP,扩展KMP和Manacher就不写了,感觉没多大意思.   之前感觉后缀自动机简直可以解决一切,所以不怎么写后缀数组.   马拉车主要是通过对称中心解决问题,有的时候要通过回文串的边界解决问题 ...

  6. HDU 5421 Victor and String(回文树)

    Victor and String Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 524288/262144 K (Java/Othe ...

  7. [模板] 回文树/回文自动机 && BZOJ3676:[Apio2014]回文串

    回文树/回文自动机 放链接: 回文树或者回文自动机,及相关例题 - F.W.Nietzsche - 博客园 状态数的线性证明 并没有看懂上面的证明,所以自己脑补了一个... 引理: 每一个回文串都是字 ...

  8. UESTC - 1999 也许这是唯一能阻止乐爷AK的方法( Just for Fun )(回文树)

    https://vjudge.net/problem/UESTC-1999 题意 对于一个初始为空的字符串S,你可以进行以下两种操作: 1. 在S的末尾加一个小写字母. 2. 移除S的最后一个字母. ...

  9. 回文树练习 Part1

    URAL - 1960   Palindromes and Super Abilities 回文树水题,每次插入时统计数量即可. #include<bits/stdc++.h> using ...

随机推荐

  1. Seek the Name, Seek the Fame---poj2752(kmp中的Next数组)

    题目链接:http://poj.org/problem?id=2752 题意就是求出是已知s串的前缀的长度x,并且要求此前缀也是s串的后缀:求出所有的 x : Next[i]的含义是前i个元素的前缀和 ...

  2. qemu网络虚拟化之数据流向分析三

    2016-09-27 前篇文章通过分析源代码,大致描述了各个数据结构之间的关系是如何建立的,那么今天就从数据包的角度,分析下数据包是如何在这些数据结构中间流转的! 这部分内容需要结合前面两篇文章来看, ...

  3. rest_framework 之分页器

    一  分页器--准备 1.1  基本参数 # 普通分页 from rest_framework.pagination import PageNumberPagination # 偏移分页 from r ...

  4. Flask蓝图,Session,闪现,中间件等

    Session 除请求对象之外,还有一个 session 对象.它允许你在不同请求间存储特定用户的信息.它是在 Cookies 的基础上实现的,并且对 Cookies 进行密钥签名要使用会话,你需要设 ...

  5. Navicat工具、pymysql模块、数据备份

    IDE工具介绍(Navicat) 生产环境还是推荐使用mysql命令行,但为了方便我们测试,可以使用IDE工具,我们使用Navicat工具,这个工具本质上就是一个socket客户端,可视化的连接mys ...

  6. JavaWeb-Servlet开发2

    ---恢复内容开始--- ServletConfig 配置Servlet初始化参数 在Servlet的配置文件web.xml中,可以使用一个或多个<init-param>标签为servle ...

  7. IT开发工程师的悲哀现状和可能前途

    IT开发工程师的悲哀现状和可能前途 本文所指的开发工程师,仅指程序开发人员和以数字电路开发为主的电子工程师.当你选择计算机或者电子.自控等专业进入大学时,你本来还是有机会从事其它行业的,可你毕业时执迷 ...

  8. 单舵轮(叉车)AGV里程计数据解算

    单舵轮(叉车)AGV里程计数据解算 2016-07 单舵轮AGV,一般包含一个驱动轮和两个从动轮,驱动轮是同时具备行走和转向两个功能的舵轮,因此,单舵轮AGV的运动学自由度为2个.舵轮线速度V1,舵轮 ...

  9. Linux中的yum的配置以及常见报错的处理

    一. 今天登录服务器的时候,误把yum所在的cache文件夹中的文件删除掉了,导致yum不能够使用,解决的方法: 显示错误如下: Loaded plugins: fastestmirror Deter ...

  10. jenkins SSH登录 Git配置(通过eclipse生成SSH 密钥)

    1.通过eclipse生成SSH 密钥 菜单栏的windows-->preferences-->General-->Network Connections-->SSH2--&g ...