小工具知识网

当前位置: 首页 > 行业知识 > 树链相关问题

行业知识

树链相关问题

2026-11-04 14:00:52 来源:互联网转载

轻重链剖分求LCA

  • 轻重链剖分,就是将一棵树划分为多个互不相交的链
  • 两遍,复���度
  •  维护出该节点的直接父亲,在通过其儿子节点中重量最大的(即以其为根的子树大小最大)作为重儿子,也就是该点所在树链的直接儿子,同时维护深度
  •  维护每条链的链头,用于处理不在同一条链上的两点求,实现直接跳过一条链
  • 若两点在一条链上,则输出深度较低的点
  • 若两点不在一条链上,则两点中链头深度较大往上跳,直到两个跳到同一条链上
  • 复杂度

    虚树

    • 通过关键点建树,删去关键点影响不到的点
    • 单调栈维护
    • 实际单调栈中维护了一条树链
    • 根先入栈,然后关键点按照序依次入栈
    • 设当前加入的关键点为,当前栈顶为,求其
    • 若,则在单调栈维护的树链上,直接入栈
    • 若,则弹出栈顶,并将与新栈顶连边,然后接着弹栈顶
    • 若当前栈顶的序小于的序,则说明栈中没有,则先将入栈,再入栈
    • 否则,一定能找到,然后将入栈
    • 最后,再将单调栈中维护的树链,进行连边(依次弹出,并对新栈顶连边)
    • 至此,虚树建立完毕,然后在虚树上跑树形
    • 注意,只用在每次新添入栈时,删去该点上次建树链式前向星连的边即可

上一篇:电脑服务器的英语怎么写?

下一篇:Rust升级慢,使用国内镜像进行加速