游荡的孤高灵魂不需要羁绊之处。

洛谷题单

点分治

前置芝士

树的重心

树分治

例题略解

P3806 【模板】点分治1

板子题,先暴力找到整棵树的重心,然后先求出重心到各点的距离,进而算出他所在树的各个节点的距离,在对应的ans数组加一;然后再接着扫子节点,并把儿子节点子树的贡献减去,最后回答询问。

然后我们愉快的\(TLE60pts\),题目上也有说明,这种做法使用于大部分不过本体比较卡时间,储存然后离线剪枝就好了。

这里给出\(60pts\)的\(code\)

P2634 [国家集训队]聪聪可可

luogu的数据有那么亿点水,我点分治打假了(find函数x打成了i,Divide函数to打成了x)都没事。。。

和上一题差不多,就是存储不同,对于mod3不同的余数进行储存,然后给自己加一个\(p_0^2+2\times p_1\times p_2\)扫到儿子再减去儿子的这个值就好了

\(code\)

P4149 [IOI2011]Race

乍一看这不上面的模板题嘛,然后愉快的WA0pts。

这个题不一样的一点就是维护距离的同时还需要再维护一个边数,还是和前面的题一样,整一个桶储存更新,然后对于距离大于k的剪枝,再注意一下桶的数组大小。

还有就是solve函数里记得跳过访问过的节点 (别问我为啥知道,TLE90挺好的)

\(code\)

P4178 Tree

看着是个板子题,其实不然。。

讲了点分治的一种新方法(至少我没听过)染色法

大概就是把每一棵搜到的子树标记上一种颜色,然后对于想要求的一棵子树根据dis由小到大排序后压入双段队列 (队列好像本来就是双端的),然后一个一个弹出来,更新就行了。

\(code\)

U164635 [BZOJ3697]采药人的路径

思路有一点妙,先是把阴也就是边权为0的边化为-1。我们求出每个结点到根节点的路径和dis,如果这条路径上有两个结点的dis相等,就说明有一段的路径和为0,即这个路径上可以设置一个休息站。

然后开一个\(f[i][0/1]\)和一个\(g[i][0/1]\)分别表示dis为i的正在运算子树和其他子树是否可以建休息站。对于下标为负数的情况直接给所有下标都加上一个n就好了。

\(code\)

P3714 [BJOI2017]树的难题

单调队列优化的比较好的题解

单调队列优化太难搞了。。线段树合并比较好。。

对于树上的各个链,状态无非三种

  1. 过根节点,在两棵子树里。
  2. 在一棵子树里
  3. 过根节点但是在一棵子树里

对于以上三种状态的话,还是第一种实现难度比较大,但是我们可以分类讨论,并且记录上一条边的颜色与现在扫到的边进行判断,因此我们需要对于一个节点的几条边排一下序,就不能用前向星存边了,用vector数组就好了。。

线段树建立在长度上,对于种类进行维护,为了降低复杂度并且按深度运算,我们采用BFS来实现,线段树合并一下就好。

\(code\)

cdq分治

前置芝士

cdq分治1

cdq分治2

例题略解

P3810 【模板】三维偏序(陌上花开)

板子题,但是由于我看了上面的blog,一下午都整到这一个题上了,所以对于上面的blog,看看思路就好...

先对于a排序,然后运用归并排序的思想,对于整个区间进行多次二分,计算贡献,然后就是代码实现了,我也啥也不想说了,吐了。。

\(code\)

P4390 [BOI2007]Mokia 摩基亚

当然正解是cdq分治 (当然权值线段树+分块也能过),本来我打算二维分块的,后来一想这不是cdq专题么,水过去不合适(绝对不是我懒得打分块!绝对不是!)

运用前缀和的思想,所求正方形的就是大的正方形减去两个矩形,然后再加上小的正方形,注意一下边界问题就好了,一开始排序的时候第1.2.3.4关键字分别为:横坐标,纵坐标,时间,贡献。然后愉快地cdq分治就好了。

\(code\)

P4169 [Violet]天使玩偶/SJY摆棋子

我太菜了,调了一晚上最后还是TLE,吸了口氧气才过,差点就用双指针了,最后发现是一开始opt整成了0而不是1(雾。

比较妙的一个地方就是扫的时候只扫左下方的点然后将各个象限翻到第三象限同样的处理,然后就和之前的题目类似了。

\(code\)

P3157 [CQOI2011]动态逆序对

还是cdq分治以时间先排个序,然后在进行维护,唯一不同的点就是为了减小时间复杂度,先整出后来删掉后序列的逆序对,然后向前累加就好了。

\(code\)

P4093 [HEOI2016/TJOI2016]序列

中序遍历按照项从小到大转移,因此不用重新排序,另外我们分别用maxn和minn分别记录每一项的最大值以及最小值,然后用一个f数组记录以i结尾最长上升子序列的长度,然后哦cdq分治。

\(code\)

(动态)点分树

前置芝士

动态树分治

例题略解

P3241 [HNOI2015]开店

啥也不想说了,这破题,看yxc的讲解视频,看的差不多半个下午才感觉凑合懂了一点;然后尝试自己实现,然后又一次打开了他的视频。然后视频+VsCode=半个下午,共计一个下午,终于干出来了。

大概思路就是对于点u到v的距离,可以看作一个重心的两个子树里的两个点之间的距离,然后无限递归,直到u是某个树的重心为止,然后对于u到n个不同的v的距离,可以发现u到重心的路是必须经过的

因此我们可以暴力加和其他部分,然后对于重复的部分直接数量乘上长度就好了。为了查询更方便,我们对于每一个节点开两个vector数组分别用来维护自己和儿子,然后push_back进去一个-1和A+1当作两个边界,然后码就好了。就是这么简(du)单(liu)。

还有就是auto这种东西最好少用。。。

\(code\)

P3345 [ZJOI2015]幻想乡战略游戏

一篇码风比较好的blog

和上面那个题有一些相似,就是找带权重心嘛,也是开了两个vector分别记录某个节点的祖先以及子节点,然后就是一堆板子类的东西,求出size,重心那一类的东西。

最后在各个节点尝试枚举儿子,儿子的节点状态从父亲直接转移,需要多看一下初始化的主函数,细节比较多。。。

  • 注意:不要全开long long 不然虽然在Luogu可以AC,但是在本地以及别的OJ(比如我们的校内OJ)就玄乎了。

\(code\)

点分治&cdq分治 总结的更多相关文章

  1. [bzoj] 3263 陌上花开 洛谷 P3810 三维偏序|| CDQ分治 && CDQ分治讲解

    原题 定义一个点比另一个点大为当且仅当这个点的三个值分别大于等于另一个点的三个值.每比一个点大就为加一等级,求每个等级的点的数量. 显然的三维偏序问题,CDQ的板子题. CDQ分治: CDQ分治是一种 ...

  2. UOJ #7 NOI2014购票(点分治+cdq分治+斜率优化+动态规划)

    重写一遍很久以前写过的题. 考虑链上的问题.容易想到设f[i]为i到1的最少购票费用,转移有f[i]=min{f[j]+(dep[i]-dep[j])*p[i]+q[i]} (dep[i]-dep[j ...

  3. [BZOJ3672][Noi2014]购票 斜率优化+点分治+cdq分治

    3672: [Noi2014]购票 Time Limit: 30 Sec  Memory Limit: 512 MBSubmit: 1749  Solved: 885[Submit][Status][ ...

  4. 【BZOJ4237】稻草人(CDQ分治,单调栈)

    [BZOJ4237]稻草人(CDQ分治,单调栈) 题面 BZOJ 题解 \(CDQ\)分治好题呀 假设固定一个左下角的点 那么,我们可以找到的右下角长什么样子??? 发现什么? 在右侧是一个单调递减的 ...

  5. 一篇自己都看不懂的CDQ分治&整体二分学习笔记

    作为一个永不咕咕咕的博主,我来更笔记辣qaq CDQ分治 CDQ分治的思想还是比较简单的.它的基本流程是: \(1.\)将所有修改操作和查询操作按照时间顺序并在一起,形成一段序列.显然,会影响查询操作 ...

  6. 浅谈CDQ分治与偏序问题

    初识CDQ分治 CDQ分治是一个好东西,一直听着dalao们说所以就去学了下. CDQ分治是我们处理各类问题的重要武器.它的优势在于可以顶替复杂的高级数据结构,而且常数比较小:缺点在于必须离线操作. ...

  7. cdq分治略解

    前言 陌上花开,可缓缓归矣                         --吴越王 寓意:意思是:田间阡陌上的花开了,你可以一边赏花,一边慢慢回来. 隐意:春天都到了,你怎么还没有回来.形容吴越王 ...

  8. 『cdq分治和多维偏序问题』

    更新了三维偏序问题的拓展 cdq分治 \(cdq\)分治是一种由\(IOI\ Au\)选手\(cdq\)提出的离线分治算法,又称基于时间的分治算法. 二维偏序问题 这是\(cdq\)分治最早提出的时候 ...

  9. [BZOJ1492] [NOI2007] 货币兑换Cash(cdq分治+斜率优化)

    [BZOJ1492] [NOI2007] 货币兑换Cash(cdq分治+斜率优化) 题面 分析 dp方程推导 显然,必然存在一种最优的买卖方案满足:每次买进操作使用完所有的人民币:每次卖出操作卖出所有 ...

随机推荐

  1. 三、多线程之Thread与Runnable的区别

    Thread与Runnable的区别(用三个窗口同时出售10张车票为例子) 运行代码 运行结果 分析 System.out.println("开始测试多线程");class MyT ...

  2. 集成Spring Data JPA

    1.Spring Data JPA简介 Spring Data是一个用于简化数据访问,并支持云服务的开源框 使用完成Spring Data JPA对user表的CRUD操作. 2.步骤 1.创建工程勾 ...

  3. Scrum Meeting 4

    Basic Info where:共享空间 when:2021/4/29 target: 简要汇报一下已完成任务,下一步计划与遇到的问题 Progress Team Member Position A ...

  4. SpringBoot系列——事件发布与监听

    前言 日常开发中,我们经常会碰到这样的业务场景:用户注册,注册成功后需要发送邮箱.短信提示用户,通常我们都是这样写: /** * 用户注册 */ @GetMapping("/userRegi ...

  5. golang:三次握手四次挥手总结

    TCP的三次握手 所谓三次握手 Three-Way Handshake 是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立.好比两个人在打电话: 当连接被建立或被终止,交换的报 ...

  6. CrystalDiskMark v7.0.0h中文版

    CrystalDiskMark v7.0.0h中文版 发布时间:2020/03/05 05:03:09作者:zhongdong CrystalDiskMark是一个轻量级高效率检测工具,所有内容整齐的 ...

  7. nohup 命令 2>&1 |tee lmbench.log & 只适用没有需要敲y或x的

    nohup make results 2>&1 |tee lmbench.log & nohup 命令 2>&1 |tee lmbench.log & 只适 ...

  8. Bootstrap Bootstrap3 与 Bootstrap4 的区别

    Bootstrap3 与 Bootstrap4 官网地址 Bootstrap3 官网:https://v3.bootcss.com Bootstrap4 官网:https://v4.bootcss.c ...

  9. unity lua require dofile loadfile 区别

    oadfile,加载文件,编译文件,并且返回一个函数,不运行 dofile其实就是包装了Loadfile,根据loadfile的返回函数运行一遍 require加载文件的时候,不用带目录,有lua自己 ...

  10. [论文阅读笔记] Are Meta-Paths Necessary, Revisiting Heterogeneous Graph Embeddings

    [论文阅读笔记] Are Meta-Paths Necessary? Revisiting Heterogeneous Graph Embeddings 本文结构 解决问题 主要贡献 算法原理 参考文 ...