首页 > 其他分享 >长链剖分

长链剖分

时间:2023-02-07 09:57:41浏览次数:68  
标签:长链 剖分 长剖 highbit len geqslant 短边

概述

  • 长链剖分通过把树剖成尽量长的多个链,高效地解决...我也不知道解决啥(长剖优化 DP 的东西在 DP 优化那边)。

  • 毕竟这个东西,不具备启发式分裂的复杂度。不过其还是有一点性质的,有时候确实会用到...

  • 恰如轻重剖是按 \(siz\) 选重儿子,长剖是按 \(dep\)(这里指当前子树的最大深度)来选长儿子,其余部分相同。

  • 长剖有一个关键性质:每走一次短边,所在的长链长度至少 \(+1\)。

    • 证明显然,否则长儿子应该是它。

    • 由此可以证明到根至多走 \(O(\sqrt{n})\) 次短边,因为长链不交,且每次 \(+1\),则 \(1\sim \sqrt{n}\) 就是极限了。某些奇怪的 dp 可能会用到这个性质。

树上 k 级祖先

  • 考虑利用长剖的链长单调不降性,把某些询问拆成两半。

  • 具体来讲,我们长剖,并记录每个长链从链头起向上/下走 \(1\sim len\) 步到哪里,\(len\) 为链长,\(O(n)\)。

  • 然后倍增求一下所有点的 \(2^i\) 级祖先。\(O(n\log n)\)。

  • 当询问时,我们首先向上跳到 \(highbit(k)\) 处,此时还需要跳 \(k-highbit(k)\leqslant \lfloor\dfrac{k}{2}\rfloor\) 步。证明如下:

    • 若该跳跃没有改变所在的长链:\(len\geqslant highbit(k)\),故用链头记录的向上走 \(1\sim len\) 的结果一定可以找到所要的祖先。

    • 若该跳跃改变了所在的长链:

      • 首先考察只走了一次短边的简单情况。此时找到短边的父节点发出的长边(这里按外向树考虑),比较两者终点向下延展出的长链(对,实边终点向回走的那部分不考虑),容易看出 \(len_{actual}\geqslant len_{visional}\),否则短边才应当是长边。

      • 推广到多次跳跃短边的情况,容易证明,最终所在的长链长度一定 \(\geqslant\) 跳过的距离。故,\(len\geqslant highbit(k)\geqslant k-highbit(k)\),一定能用向上的走法一步走到。

    • 同理,在链头下的也一定能走到。

  • 综上,复杂度为 \(O(n\log n+q)\)。

长剖优化 DP

标签:长链,剖分,长剖,highbit,len,geqslant,短边
From: https://www.cnblogs.com/weixin2024/p/17097376.html

相关文章

  • 轻重链剖分
    概述轻重链剖分通过将树剖分为若干条重链和它们之间相连的轻边,将树上路径问题转化成序列问题。具体来讲,有很多树上路径问题本质上是把序列上的问题搬到了树上,此时我......
  • 关于长链剖分的数组实现 | CF1009F Dominant Indices
    请容许我不理解一下为什么这题题解几乎全都是指针实现/kk其实长链剖分是可以直接用数组来写的。考虑朴素DP。设\(f_{u,i}\)表示以点\(u\)为根的子树中与点\(u\)距......
  • 树链剖分
    dfs序与树链剖分dfs序比如dfs序为:ABDGHICEJF时间戳时间戳即dfs每次访问到每个节点的时间,时间从1开始累加比如上图时间戳为用处把树强行搞成连续的......
  • Codeforces-343D Water Tree(树链剖分)
    Description:MadscientistMikehasconstructedarootedtree,whichconsistsof n vertices.Eachvertexisareservoirwhichcanbeeitheremptyorfilledw......
  • SPOJ375--Query on a tree(树链剖分)
    Description:Youaregivenatree(anacyclicundirectedconnectedgraph)with N nodes,andedgesnumbered1,2,3...N-1.Wewillaskyoutoperfromsomeins......
  • 树链剖分
    “在一棵树上进行路径的修改、求极值、求和”乍一看只要线段树就能轻松解决,实际上,仅凭线段树是不能搞定它的。我们需要用到一种貌似高级的复杂算法——树链剖分。树链剖分......
  • 树链剖分入门
    目录树链剖分算法思想模版-树链剖分旅行P4374P4211CF1023FP1505P2486P7735P3976Trick总结树链剖分这玩意也是才开始预习,写得不好勿喷。约定记号:\(siz[x]\),\(x\)为根的......
  • 树链剖分学习笔记
    怕到时候忘了,来写一篇笔记前置芝士:树的存储与遍历,\(dfs\)序,线段树。树链剖分的思想及能解决的问题:树链剖分用于将树分割成若干条链的形式,以维护树上路径的信息。具体......
  • 树链剖分
    简述树链剖分用于将树分割成若干条链的形式,以维护树上路径的信息。具体来说,将整棵树剖分为若干条链,使它组合成线性结构,然后用其他的数据结构维护信息。树链剖分(树剖/链......
  • 【YBT2023寒假Day1 B】不跪模样(树链剖分)(线段树)
    不跪模样题目链接:YBT2023寒假Day1B题目大意给你一棵有根数,点有点权,两种操作:对于所有x子树内与x距离不超过2的点,将其点权加v。询问x子树中,满足i<=j且i,j......