首页 > 其他分享 >点分治 学习笔记

点分治 学习笔记

时间:2023-03-16 20:55:36浏览次数:50  
标签:路径 递归 复杂度 分治 Tree 笔记 学习 子树

新知识 +1 。

0x00 前言

点分治适合处理大规模的树上路径信息问题。

0x01 引入

我们通过洛谷的模板题来引入点分治的概念: P3806 【模板】点分治1 :给定一棵有 n 个点的带边权树, m 次询问,每次询问树上距离为 k 的点对是否存在。

考虑以 r 为根的一棵树中的路径。这些路径可以分成两类:(1) 经过 r 的;(2) 在 r 的子树内的。发现这是一个子问题,所以我们可以每次只考虑经过 r 的路径再递归下去处理。而对于那些经过 r 的路径 \(u\rightarrow v\) ,我们可以拆成 \(u\rightarrow r\) 和 \(r\rightarrow v\) 两部分,即先计算子树的链,再把它们合并成一条完整的路径。这样,我们就得到了点分治的基本框架,即:以是否经过当前根节点为依据,将路径分为两个部分,递归地处理不经过当前根节点的路径,并尝试在只与当前子树大小有关的时间复杂度内解决经过当前根节点的路径。

0x02 实现

在具体实现计算时,我们一般有两种方法:开一个桶维护之前的链长,或把所有链求出来后双指针。两种方法各有优劣:桶胜在一手简单直观,但空间大可能开不下,且如果不及时清空可能导致 [数据删除] 的神必错误;双指针更加快捷但更复杂,不能处理和是 k 的倍数、乘积为 k 的倍数等没有简单的单调性质的信息。当然,也可以用 BIT 维护,但这样会多一个 \(\log n\) ,不是很常用。

0x02.5 优化

点分治过程中,每一层的所有递归过程会对每个点处理一次,假设共递归 D 层,则总时间复杂度就是 \(\text{O}(Dn)\) 在遇到链等极端情况时难以接受。为了使树的结构更均匀,若我们每次选择子树的重心作为根节点,可以保证递归层数最少,总时间复杂度为 \(\text{O}(n\log n)\) 。注意在重新选择根节点之后要重新计算子树的大小,否则可能导致 [数据删除] 的时间复杂度错误。

0x03 应用

P4178 Tree & P4149 [IOI2011]Race & P2634 [国家集训队]聪聪可可 & CF161D Distance in Tree & HDU4812 D Tree

五道板。

HDU5977 Garden of Eden

比较板,但是为什么要再清空一次?

CF1156D 0-1-Tree

大力分讨。

P2664 树上游戏

占坑。还没写。

标签:路径,递归,复杂度,分治,Tree,笔记,学习,子树
From: https://www.cnblogs.com/xx019/p/17222084.html

相关文章

  • 人月神话阅读笔记02
    【续】对于一个项目而言,过多的团队成员反而不会使得团队的整体效率得到提升,因为太多的团队成员就意味着更多的、更复杂的交流和沟通,若是意见分歧太多,反而会直接影响到团队......
  • 抓取王者荣耀英雄列表的爬虫笔记(python+requests)
    在开始这个内容之前,我们先来一张效果图:实现它,需要几个过程:调用王者荣耀助手的数据接口获取所有英雄的图片通过迭代,把所有图片转换成二进制数据流把这些数据导入MySQL数据库......
  • 概率论与数理统计及其应用学习笔记1(numpy+matplotlib)
    先把基本概念都理一遍,博客的后半部分会上具体函数实现,没有前半部分的基础,后半部分看起来会有点吃力样本空间:某个实验的所有可能结果组成的集合样本点:样本空间的每个结......
  • 06.深度学习--分类模型
    分类模型输入对象x,输出是这个对象属于哪一个类class,这样的应用同样有很多,比如:在金融上可以通过分类模型来决定是否贷款给某人;图像识别方面;人脸辨识方面,等等。这里依然使......
  • 05.深度学习--回归模型
    回归模型回归模型,可以做很多预测模型,比如:一个很好的股票预测系统,我们可以找到一个function,预测的数据可以是选择过去十年的股票数据,根据这些数据我们希望得到的是明天的股......
  • 【Irrlicht引擎 笔记】Core模块
    irr::core向量、平面、数组、列表等基础类都可以在这个命名空间中找到irr::coreirr::core::vector2d<T>irr::core::vector3d<T>irr::core::vector2d<T>1.判断......
  • 联邦学习开源框架FATE架构
    作者:京东科技葛星宇1.前言本文除特殊说明外,所指的都是fate1.9版本。fate资料存在着多处版本功能与发布的文档不匹配的情况,各个模块都有独立的文档,功能又有关联,坑比较......
  • 上位机学习记录(3)编写用户登录模块
    上位机学习记录(3)编写用户登录模块(一)业务逻辑说明FrmLogin界面的cmb_LoginName控件进行数据绑定,通过SysAdminService.GetAllAdminDB()获取到所有的用户信息(二)界面初始化......
  • Linux & 标准C语言学习 <DAY14>
    一、头文件  头文件可能会被任意源文件包含,意味着头文件中的内容可能会在多个目标文件中存在,要保证合并时不要冲突  重点:头文件只编写声明语句,不能有定义语句......
  • pytest笔记——fixture作用范围
    一、前言在使用pytest测试框架的时候,会经常使用到fixture,fixture相对灵活,能更好的实现一些用例场景的前置以及后置的操作,但在使用的过程中也经常遇到各种问题,例如我明明已......