zoukankan      html  css  js  c++  java
  • 长链剖分总结

    长链剖分总结

    概念

    长链剖分和轻重链剖分十分相似,都是将一棵树节点的信息分成多条链的信息,但是前者是以深度剖分,后者则是以子树大小来剖分。

    同时长链剖分还借鉴了$dsu;on;tree$的一些$trick$使得它能十分高效地合并子树信息。

    性质

    破天荒地写了证明

    性质一

    所有链长度之和为节点数

    证明:

    • 每个点在且仅在一条链中

    性质二

    任意一个点$k$级祖先所在长链的长度一定大于等于$k$

    证明:

    • 假如$y$所在长链的长度小于$k$,那么它所在的链一定不是重链,因为$x-y$这条链显然更优,那么$y$所在的重链长度至少为$k$,性质成立。否则 $y$ 所以在长链长度大于等于 $k$ ,性质成立。

    性质三

    任意一个点跳重链到根所用的次数不超过$sqrt n$

    证明:

    • 根据性质二,如果一个点从当前链跳到另一条链上,另一条链的长度大于当前链的长度
    • 那么最坏情况为链长分别为$1,2,3...sqrt n$共$sqrt n$次

    一些trick

    一、高效计算k级祖先

    首先对树进行长链剖分,记录每个节点所在的链的链顶,然后按深度记下每条链中的节点和这条链的长度个数个祖先,再预处理倍增数组代表$2^k$祖先。根据性质二,我们跳到节点的大于$frac k2$次祖先,我们可以通过之前预处理出的链顶祖先中找到$k$及祖先,感性理解分析可得,第一次跳$highbit(k)$次祖先最快,复杂度$O(1)$

    总复杂度$O(nlogn)+O(询问次数)$

    代码在这里

    二、快速合并以深度为下标的子树信息

    这个题

  • 相关阅读:
    APP_DEBUG作用
    tp字段映射机制原理
    unix、windows、mac 的换行习惯
    DroidCam 一片 红色 解决办法
    A3 A8 算法,中文简明解释
    /usr/local/mysql/bin/mysql P 3307 protocol=tcp 无法连接mysql
    [转载]网络基础:精解传输层安全协议
    无线网络加密一点漫谈
    安全模式:J2EE、Web服务和身份管理最佳实践与策略
    scp和winscp
  • 原文地址:https://www.cnblogs.com/heyujun/p/10228730.html
Copyright © 2011-2022 走看看