首页 > 其他分享 >线段树合并 & DSU on tree

线段树合并 & DSU on tree

时间:2024-03-10 11:55:50浏览次数:22  
标签:tree 线段 DSU 合并 节点 复杂度

线段树合并 & Dsu on tree

CF600E

线段树合并,每个节点下维护子树下每个颜色的数量,建立权值线段树

复杂度证明:叶子节点 \(O(log m)\)

Dsu on tree 重儿子信息保留,轻儿子信息递归计算一次,合并一次。

复杂度证明:对于一个点,最多经过 \(O(\log n)\) 条轻边,第一次被递归执行一次,每次被当作轻儿子子树节点,都会被合并一次 \(O(轻边个数+1)\) 复杂度正确

思想

线段树合并基于动态开点,是把子树信息合并,实现的基础是 pushup 可以 \(O(1)\) 完成,一般还是联系到区间问题。

而 \(DSU\) 其实是一个相当暴力的算法,但是经过一些优化,竟然也可以达到正确的复杂度。

两种算法都可以解决树上统计信息的问题,互补互用,实际遇到问题的时候要权衡利弊

练习题

CF600E

Tree Rotations

雨天的尾巴

标签:tree,线段,DSU,合并,节点,复杂度
From: https://www.cnblogs.com/life-of-a-libertine/p/18063941

相关文章

  • 线段树写法勘误
    今天下午写这题 牛牛的等差数列 时瞪了一下午没找到为什么wa了,留个记录提醒一下自己后面发现好像是线段树modify函数写错了一般modify函数我都是写成这样的 但是写这题mid卡在修改区间中间这种写法有点难处理于是我就写了这种写法 一直在wa,问题出在这里 ......
  • Binary Tree Maximum Path Sum
    SourceGivenabinarytree,findthemaximumpathsum.Thepathmaystartandendatanynodeinthetree.ExampleGiventhebelowbinarytree,1/\23Return6.题解1-递归中仅返回子树路径长度题目很短,要求返回最大路径和。咋看一下......
  • CF1846D Rudolph and Christmas Tree 题解
    因为\(n\)个三角形有重叠部分,所以我们可以倒序处理每个三角形,并对其进行分类讨论:若当前三角形编号为\(n\),则直接将总面积加上\(\dfrac{d\timesh}{2}\)。否则,再次分出两种情况:若当前三角形的\(y_i+h>y_{i+1}\)(即编号为\(i,i+1\)的三角形有重叠),则如下图所示:......
  • TreeMap练习
    TreeMap练习1."aababcabcdabcde",获取字符串中每一个字母出现的次数要求结果:a(5)b(4)c(3)d(2)e(1)packagecom.shujia.day14;importjava.util.Map;importjava.util.Set;importjava.util.TreeMap;publicclassTreeMapTest1{publicstaticvoidmain(String[]arg......
  • Compressed Tree
    首先官方题解写的挺好的,可以看为什么需要在DP状态中定义\(i\)及其父亲的这条边也在呢?你可以试试不定义,那么你会发现是推不走的,因为比如我们现在正在推\(i\),那么他的一个儿子\(u\)的DP值都知道了,但是由于有了\((u,i)\)这一条边,我们就把\(u\)的度数改变了,这个时候\(u\)的DP值就不在......
  • 高德地图api标记点和线段重合点击响应问题
    问题现象:现在地图上放置了line和marker,marker在line的上层显示这时line和marker同时存在,当line和marker有重合部分并点击重合点时,只响应line对应的click事件,而位于下方的line无法响应对应的click事件如图:原因:点击事件被上层的marker阻挡,marker并未注册点击事件解决方案在am......
  • [HDU6647] Bracket Sequences on Tree 题解
    [HDU6647]BracketSequencesonTree题解一道纯靠自己推出来的换根\(dp+\)树哈希,写篇题解庆祝一下~~题意:给定一棵无根树,你可以任意选择根节点和遍历顺序,每次遍历时进入一个节点就标记一个(,离开一个节点就标记一个),问所有存在的括号序列有多少种,对998244353取模。先考虑根固......
  • 【学习笔记】 - 基础数据结构 :Link-Cut Tree(进阶篇)
    前言LCT没题写可以去写树剖和一些线段树合并的题练手LCT的概念原本的树剖是对树进行剖分,剖分为重边和轻边LCT则是对于树分为虚边和实边,特殊的,LCT可以没有虚边(例:银河英雄传说v2)单独被包含在一个实链里的点称作孤立点在树剖中,我们使用线段树/树状数组来维护重链在Link-Cut......
  • 说说Vue 3.0中Treeshaking特性?举例说明一下?
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 一、是什么Treeshaking 是一种通过清除多余代码方式来优化项目打包体积的技术,专业术语叫 Deadcodeelimination简单来讲,就是在保持代码运行结果不变的前提下,去除无用的代码如果把代码打包比作制作蛋糕,传统......
  • 向TreeView添加自定义信息
    可在Windows窗体TreeView控件中创建派生节点,或在ListView控件中创建派生项。通过派生可添加任何所需字段,以及添加处理这些字段的自定义方法和构造函数。此功能的用途之一是将Customer对象附加到每个树节点或列表项。虽然此处的示例是关于TreeView控件的,但该方法同样......