首页 > 其他分享 >树论

树论

时间:2023-07-08 16:22:11浏览次数:38  
标签:剖分 树论 DFN 重子 维护 重链 节点

1. 重链剖分

1.1. 简介

重链剖分将树分割成若干链维护信息,将树的结构转换为线性结构,然后可用其他数据结构维护。

定义以下概念:

重子节点 轻子节点 重边 轻边 重链
某节点的子节点中子树大小最大的那个 某节点的子节点中的非重子节点 由某节点到其重子节点的连边 由某节点到其轻子节点的连边 若干条头尾相接的重边构成的链(落单的节点也看作一个重链

重链剖分有以下性质:

  1. 剖分时优先遍历重边,于是一条重链上的 DNF 序连续。
  2. 一颗子树内 DFN 序连续。

根据这两条性质我们可以考虑维两节点路径上的信息,与一个子树内的信息。路径上的信息可以用若干重链信息拼接而成维护,子树内则直接用一定范围内连续 DFN 的节点信息维护即可。

重链剖分同时可以解决求 LCA 问题,当然,这在维护路径上信息时就需要用到。对于两个节点,考虑将深度大的节点跳转至其所在重链顶点的父节点,进行此操作若干次直到两者在一条重链上。最后一个一个跳转即可。

1.2. 具体实现

实现时,维护以下变量:

\(fa_i\) \(dep_i\) \(siz_i\) \(hson_i\) \(top_i\) \(dfn_i\) \(rk_i\)
节点 \(i\) 的父节点 节点 \(i\) 的深度 节点 \(i\) 的子树大小 节点 \(i\) 的重子节点 节点 \(i\) 所在重链顶点 节点 \(i\) 的 DFN 序 DFN 序为 \(i\) 的节点编号

剖分操作需要进行两次 DFS:

  • 第一次 DFS 维护 \(fa_i,dep_i,siz_i,hson_i\)。
  • 第二次 DFS 维护 \(top_i,dfn_i,rk_i\)。

标签:剖分,树论,DFN,重子,维护,重链,节点
From: https://www.cnblogs.com/Eon-Sky/p/17537331.html

相关文章

  • 树论汇总
    一、最近公共祖先最近公共祖先二、树链剖分重链剖分长链剖分三、树分治点分治点分树四、计数问题Prufer序列......
  • 树论 基础
    本文包含树的定义,树的存储,树的遍历(包括定义,求法).基础定义我们把\(n\)个点,\(n-1\)条边的图称为树.特别情况对于树,存在部分情况,使其有着特殊的性质......
  • NOIP/CSP 树论题目口胡
    我们假设你已经熟练掌握了树上的各项基础技术.下面来做一下题吧!1.[NOIP2007提高组]树网的核简明题意:给定一棵有\(n\)个结点的带权无根树,在其直径上找到一段长......
  • Trick 10:树论小知识
    关于树上的路径\(a_1\toa_2\toa_3\toa_4\to...\toa_n\)(\(a_i\)与\(a_{i+1}\)之间未必有边,路径可重复)的路径并处理问题如果我们面临多次询问,每次给你一堆......
  • 树论
    LCA与树上差分轻重链剖分长链剖分树分治......
  • Codeforces - 1656E - Equal Tree Sums(构造 + 树论 + 图论 + 搜索、结论题、*2200)
    1656E-EqualTreeSums(⇔源地址)目录1656E-EqualTreeSums(⇔源地址)tag题意思路AC代码错误次数:0tag⇔*2200、⇔构造、⇔树论、⇔图论、⇔搜......
  • (四)树论
    树上倍增树上倍增其实可以类比为树上二分,不断的去逼近答案。也没有什么好说的直接看题吧。例\(1.1\):Tree-洛谷最近公共祖先LCA求法大致有三种:倍增\(lca\),\(Tarjan......