首页 > 其他分享 >无根树分治的三种常见方法

无根树分治的三种常见方法

时间:2024-06-19 20:31:44浏览次数:8  
标签:重心 复杂度 分治 儿子 三种 虚点 无根树 虚边

无根树分治一般常见于树上路径问题(计数,最优化等).

常见题目如

无权树树上距离为k(对1到n-1求)的路径数量.

点分黑白且可以改,求两端都是黑点的最远路径.

以我的理解,三种分治都是无法互相平替的,对于每种分治我尝试给出一道只能用这个分治的题目.

三种分治复杂度均为 logn*T(n).

其中T(n)为处理一次规模为n的子问题的开销,且需满足T(x)+T(y)<=T(x+y).

点分治

每次取重心,考虑重心所有儿子之间的贡献,去掉重心后再分治连通块.

复杂度证明

重心最大的儿子大小不超过一半,由此可证.

若超过一半重心可向较重那侧偏移,一定更优.

可点修(允许虚点虚边可边修),不需要虚点虚边,信息会被分成多个部分.

边分治

先三度化(多余三个儿子的拆虚点虚边.常见实现如左儿子右兄弟.)

每次取两侧较大那侧最小的边,考虑两侧的贡献,去掉后分治连通块.

复杂度证明

考虑三度化后的重心,该点到其重儿子的连边.

显然重儿子那侧不会小于1/3且不会大于1/2,由此可证.

可以带修(点修边修均可),需要虚点虚边.

1/3分治

不知道中文名叫啥,1/3是个明显特征,就先这么称呼吧.

如果树的大小只有2的时候直接处理两点即可.

否则,每次取重心,把重心的儿子分成两个集合,考虑两个集合之间的贡献.

然后分治到重心+集合0,重心+集合1两部分.

复杂度证明

复杂度基于一定存在一种选取方式使较小的集合大于等于1/3.

而且可以直接贪心,随意按一个顺序枚举,如果加入这个儿子后大小仍小于等于2/3就加入.

两个儿子的情况由重心性质即得.

三个儿子的话会取最小和次小两个,满足条件.

多于三个儿子可合并最小的两个儿子转换成儿子更少的情况.

这样不可能使原本无解变得有解,也不可能创造大于1/2的儿子.

(不过这种情况下贪心的严格正确性还得细证一下,可以自己思考:)

难以点修(可边修),不需要虚点虚边.

标签:重心,复杂度,分治,儿子,三种,虚点,无根树,虚边
From: https://www.cnblogs.com/QedDust/p/18257329

相关文章

  • [转帖]Redis中删除过期Key的三种策略
    Redis对于过期键有三种清除策略被动删除:当读/写一个已经过期的key时,会触发惰性删除策略,直接删除掉这个过期key主动删除:由于惰性删除策略无法保证冷数据被及时删掉,所以Redis会定期主动随机淘汰一批已过期的key当前已用内存超过maxmemory限定时,触发主动清理策......
  • 【Stable Diffusion教程】AI绘画工具SD如何安装使用?三种方法带你轻松上手!(附安装包和云
    大家好,我是向阳AI绘画专业工具StableDiffusion在哪里用怎么安装?这一期给大家介绍三种使用SD的方法,无论你有没有专业显卡都能轻松上手SD哦~一、SD本地部署秋葉安装包安装方法如果你有进一步的需求,想要学习SD的高端玩法,有高端显卡的同学们我建议本地安装部署一下SD。这里要......
  • 将本地jar引入到java工程中的三种方式
    方式一、IDEA->File->ProjectStructure->Modules->Dependencies->+->JARsorDirectories方式二、如要添加的jar文件较多,可创建目录,例:resources->libs,然后用方式一,选择此目录。方式三、如果项目是maven工程,可以通过修改pom文件,将本地jar引用工程中,如下所示<depende......
  • JAVA多线程实现的三种方式
    1.继承Thread类classExtendThreadextendsThread{//继承自ThreadprivateStringname;publicExtendThread(Stringname){this.name=name;}@Overridepublicvoidrun(){//必须重写run方法,并......
  • Linux vim 文本编辑 操作文本 三种模式
    介绍vi是一个经典的行编辑器,支持模式编辑(包括普通模式、插入模式和命令模式)。vim保留vi核心功能的基础上,增加了多级撤销、语法高亮、插件支持等高级功能。两者的最大区别,简单的来说vim就是vi的增强版三种模式命令模式(CommandMode)默认进入的是命令模式。在这个模式......
  • 目标检测数据集 - PCB板表面缺陷检测数据集下载「包含VOC、COCO、YOLO三种格式」
    数据集介绍:PCB板表面缺陷检测数据集,真实采集高质量PCB板表面含缺陷图片数据,数据集含多款不同PCB板高清表面图片数据,包括俯拍正拍、旋转拍摄姿态。数据标注标签包括missing_hole、mouse_bite、open_circuit、short、spur、spurious_copper六个缺陷类别;适用实际项目应用:P......
  • 【Py/Java/C++三种语言OD独家2024D卷真题】20天拿下华为OD笔试之【贪心/脑筋急转弯】2
    有LeetCode算法/华为OD考试扣扣交流群可加948025485可上全网独家的欧弟OJ系统练习华子OD、大厂真题绿色聊天软件戳od1441了解算法冲刺训练(备注【CSDN】否则不通过)文章目录题目描述与示例题目描述输入描述输出描述示例一输入输出说明示例二输入输出说明示例三......
  • 【Py/Java/C++三种语言OD独家2024D卷真题】20天拿下华为OD笔试之【二分查找】2024D-部
    有LeetCode算法/华为OD考试扣扣交流群可加948025485可上全网独家的欧弟OJ系统练习华子OD、大厂真题绿色聊天软件戳od1441了解算法冲刺训练(备注【CSDN】否则不通过)文章目录题目描述与示例题目描述输入描述输出描述示例输入输出说明解题思路代码pythonjavacpp时......
  • 【Py/Java/C++三种语言OD独家2024D卷真题】20天拿下华为OD笔试之【DFS】2024D-计算三
    有LeetCode算法/华为OD考试扣扣交流群可加948025485可上全网独家的欧弟OJ系统练习华子OD、大厂真题绿色聊天软件戳od1441了解算法冲刺训练(备注【CSDN】否则不通过)文章目录题目描述与示例题目描述:输入描述输出描述示例一输入输出说明示例二输入输出说明示例三......
  • 猜数游戏,比较三种算法
    猜数游戏一般的规则如下:一个人(通常称为出题者)在心中想一个特定范围内的数字,比如1到100之间。另一个人(通常称为猜题者)通过不断猜测来试图猜出这个数字。猜题者每次猜测后,出题者会告知猜测的数字是大了还是小了,猜题者根据这些提示继续猜测,直到猜对为止。以1到100之间为......