例题:

往事太多,有时候忘了就忘了吧。
如果有非记不可的,就只能用点附加手段啦!
我们定义一棵往事树是一个 n 个点 n-1 条边的有向无环图,点编号为 1到 n,其中 1 号点被称为是根结点,除根结点以外,
每个点都恰有一条出边(即以其作为起点的边)。
每条边上有 1 个字符(这里我们实际上用一个不大于 300的非负整数代表不同的字符),
对于任意一个点 u,u 的所有入边(即以其为终点的边)上的字符互不相同。
接下来我们定义往事,点 u 对应的往事为 u 到根的路径(显然有且只有一条)上的所有边按照从 u 到根经过的顺序排序后边上的字符依次拼接形成的字符串,简记为 r(u)。
一棵往事树的联系度取决于它包含的所有往事之中最相近的一对的相似度。具体的,我们定义 2 个点 u 和点 v 对应的往事的相似度 f(u,v)如下。
\(f(u,v)=Lcp(r(u),r(v))+Lcs(r(u),r(v))\)
其中 Lcp(a,b)表示字符串 a 和 b 的最长公共前缀的长度, Lcs(a,b)表示字符串a 和 b 的最长公共后缀的长度。
定义一棵往事树的联系度为所有满足 1<=u<v<=n 的 f(u,v)的最大值。
现在,给出一棵往事树,请你给出这棵往事树的联系度。

题解:

首先,将所有r(u)排序,这样,lcp就是相邻的r(u)的lcp的RMQ。(原理同后缀数组)
所以,排序后离得越近,lcp就越长。
显然,lcs就是lca的深度。
所以,枚举lca,即对树进行dfs,每次合并所有子树,并能询问所有间隔最近的RMQ的最大值。
用线段树合并,维护每个区间的lcp最大值,排名最大的节点,排名最小的节点,pushup时考虑左子节点的最大值和右子节点的最小值。
这步的时间复杂度是nlogn的。

考虑如何排序:

直接qsort,每次cmp二分+hash比较大小是logn的,总时间复杂度是nlog^2n的。

考虑另一种做法:

若我们已知长度为x的串的大小关系(排名),那么,我们将长度为x的串拼接在一起,就能得到长度为2x的串。
将长度为2x的串的前半部分的排名作为第一关键字,后半部分的排名作为第二关键字,排序后就能得到长度为2x的串的大小关系,进而得出长度为2x的串的排名。
然后,我们就可以继续这个过程,从而将所有r(u)排序。
由于排名是0~n的,所以可以采用基数排序,每轮时间复杂度是线性的,共logn轮,所以总时间复杂度是nlogn。
其实就是后缀数组的方法。

现在考虑求height(好像不能用后缀数组的那个方法):

方法一:二分+hash。

方法二:倍增,每次考虑x往上长度为2^i的串与y往上长度为2^i的串是否相等。
可以发现,这些串,在倍增排序时就考虑过了,若排名相等,这两个串就相等。将每次倍增排序的排名记录下来就行了。

总时间复杂度:\(O(nlogn)\)。

代码没了。

最新文章

  1. ObjC运行时部分概念解析(二)
  2. [CareerCup] 1.5 Compress String 压缩字符串
  3. 使用OUYA第一次启动OUYA
  4. swift系统学习控件篇:UITableView+UICollectionView
  5. Java--&gt;将txt文件的所有行反转
  6. mysql 语句其它及优化
  7. Linux的安装 CentOS-7.1
  8. mybatis 打印sql log配置
  9. linux c 系统报错
  10. Swift—使用try?和try!区别-备
  11. Cell
  12. spa(单页应用)中,使用history模式时,微信长按识别二维码在ios下失效的问题
  13. SPOJ SERGRID - Grid BFS
  14. [No0000183]Parallel Programming with .NET-How PLINQ processes an IEnumerable&lt;T&gt; on multiple cores
  15. 时间复杂度On和空间复杂度O1是什么意思?
  16. properties文件读取
  17. spring boot实现异步调用
  18. Python3基础 os listdir 列举指定的所有文件及文件夹的名字
  19. python-day34--进程补充
  20. Android网络开发之WebKet引擎基础

热门文章

  1. SrpingBoot入门到入坟01-HelloWorld和SpringBoot打Jar包
  2. 100天搞定机器学习|Day4-6 逻辑回归
  3. 十三、GPIO子系统
  4. SAS学习笔记2 基础函数应用
  5. CTS &amp; APIO 2019 游记
  6. MySQL SELECT表达式的执行顺序是从左往右依次执行
  7. maftools|TCGA肿瘤突变数据的汇总,分析和可视化
  8. poj 3253 哈夫曼贪心
  9. (十五)Activitivi5之多用户任务分配
  10. 解析Illumina+PacBio组装策略