树论

树的括号序列

树的括号序列一般有两种定义:

  1. 边的括号序列,即从根节点开始,左括号表示当前节点向下出现一条边,右括号表示回退到父节点。例题为后文的 Tree Generator™;
  2. 点的括号序列,即 DFS 时进入节点为左括号,退出节点为右括号。应用:树的最小表示法判定树同构

CF1149C Tree Generator™

题意 初始给定树的边的括号序列,每次交换两个位置的括号,保证交换后仍是一颗树,问每次得到的括号序列对应的树的直径。

引理 若从序列中任取一段连续子序列,从中去掉所有匹配括号后,剩下的括号组成的路径一定为一条链,链长为剩下的子序列长。

推论 树上直径长度即为任意区间去掉匹配括号后的长度的最大值。

不妨令左括号权值为 1,右括号权值为 1

定理 最长去匹配区间权值 = 最大的后半段的权值和 - 前半段的权值和。

接下来的部分交给线段树,详见题解。

引用与参考

  1. 题解 CF1149C 【Tree Generator™】 - KaisuoShutong

点分治和点分树

点分治是对树上的点进行分治,处理树上路径信息。点分治每次选定一个节点,处理所有经过它的路径的信息,然后逻辑删除该节点,递归处理子树。为保证时间复杂度,每次选定的点是重心,因此时间复杂度为 O(nlogn)

点分树是将点分治每次选定的中心连接,得到的一棵新的树,该树的深度不超过 O(logn),所以允许多次修改和询问。点分树要求原树的形态固定。

CF1192B Dynamic Diameter

题意 给定一棵带边权树,每次修改边权,输出树的直径。

一种可能的实现:边权转点权,建立点分树。然后……

推荐阅读

简单树论 - qAlex_Weiq - 博客园

posted @   bluewindde  阅读(88)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示