hdu6110(线段树+lca)

Posted 人活着就是为了Chelly

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu6110(线段树+lca)相关的知识,希望对你有一定的参考价值。

题目

  http://acm.hdu.edu.cn/showproblem.php?pid=6110

分析

  注意到,若干条路径的交一定也是条路径

  我们可以维护一个线段树,seg[l..r]存着第l条~第r条路径的交(用起点和终点表示即可)

  维护的时候就是两个孩子对应的路径求个交作为自己的交

  询问的时候也是讲询问分成若干段,然后逐个合并

  于是我们只要解决两条路径求交的问题就可以了

  设两个lca分别是c1,c2,dep[c1]<=dep[c2]

  设a1与a2的lca为d1,设a1与b2的lca为d2,设b1与a2的lca为d3,设b1与b2的lca为d4

  并设dep[d1]<=dep[d2]<=dep[d3]<=dep[d4]

  画图可以发现,存在路径交的充要条件是dep[d4]>=dep[d3]>=dep[c2]

  路径交就是d4->d3这一段

  时间复杂度是O(nlog^2n)

  如果求lca用rmq来求的话就是O(nlogn)了

  rmq求lca就是求dfs序数列,u,v两点的lca就是dfs序数列中dfstime[u]..dfstime[v]中深度最小的那个位置

  这样查询是O(1)的

以上是关于hdu6110(线段树+lca)的主要内容,如果未能解决你的问题,请参考以下文章

HDU5266[XSYOJ2315]LCA_LCA_线段树

HDU - 5770 Treasure 思维 + 扫描线 + 线段树 (看题解)

2018多校第十场 HDU 6430 线段树合并

HDU 4557 Tree(可持久化字典树 + LCA)

LCA+线段树/树状数组 POJ2763 Housewife Wind

Codeforces 1149C 线段树 LCA