点分治&cdq分治 总结
游荡的孤高灵魂不需要羁绊之处。
洛谷题单
点分治
前置芝士
例题略解
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\)扫到儿子再减去儿子的这个值就好了
P4149 [IOI2011]Race
乍一看这不上面的模板题嘛,然后愉快的WA0pts。
这个题不一样的一点就是维护距离的同时还需要再维护一个边数,还是和前面的题一样,整一个桶储存更新,然后对于距离大于k的剪枝,再注意一下桶的数组大小。
还有就是solve函数里记得跳过访问过的节点 (别问我为啥知道,TLE90挺好的)
P4178 Tree
看着是个板子题,其实不然。。
讲了点分治的一种新方法(至少我没听过)染色法。
大概就是把每一棵搜到的子树标记上一种颜色,然后对于想要求的一棵子树根据dis由小到大排序后压入双段队列 (队列好像本来就是双端的),然后一个一个弹出来,更新就行了。
U164635 [BZOJ3697]采药人的路径
思路有一点妙,先是把阴也就是边权为0的边化为-1。我们求出每个结点到根节点的路径和dis,如果这条路径上有两个结点的dis相等,就说明有一段的路径和为0,即这个路径上可以设置一个休息站。
然后开一个\(f[i][0/1]\)和一个\(g[i][0/1]\)分别表示dis为i的正在运算子树和其他子树是否可以建休息站。对于下标为负数的情况直接给所有下标都加上一个n就好了。
P3714 [BJOI2017]树的难题
单调队列优化的比较好的题解
单调队列优化太难搞了。。线段树合并比较好。。
对于树上的各个链,状态无非三种
- 过根节点,在两棵子树里。
- 在一棵子树里
- 过根节点但是在一棵子树里
对于以上三种状态的话,还是第一种实现难度比较大,但是我们可以分类讨论,并且记录上一条边的颜色与现在扫到的边进行判断,因此我们需要对于一个节点的几条边排一下序,就不能用前向星存边了,用vector数组就好了。。
线段树建立在长度上,对于种类进行维护,为了降低复杂度并且按深度运算,我们采用BFS来实现,线段树合并一下就好。
cdq分治
前置芝士
例题略解
P3810 【模板】三维偏序(陌上花开)
板子题,但是由于我看了上面的blog,一下午都整到这一个题上了,所以对于上面的blog,看看思路就好...
先对于a排序,然后运用归并排序的思想,对于整个区间进行多次二分,计算贡献,然后就是代码实现了,我也啥也不想说了,吐了。。
P4390 [BOI2007]Mokia 摩基亚
当然正解是cdq分治 (当然权值线段树+分块也能过),本来我打算二维分块的,后来一想这不是cdq专题么,水过去不合适(绝对不是我懒得打分块!绝对不是!)
运用前缀和的思想,所求正方形的就是大的正方形减去两个矩形,然后再加上小的正方形,注意一下边界问题就好了,一开始排序的时候第1.2.3.4关键字分别为:横坐标,纵坐标,时间,贡献。然后愉快地cdq分治就好了。
P4169 [Violet]天使玩偶/SJY摆棋子
我太菜了,调了一晚上最后还是TLE,吸了口氧气才过,差点就用双指针了,最后发现是一开始opt整成了0而不是1(雾。
比较妙的一个地方就是扫的时候只扫左下方的点然后将各个象限翻到第三象限同样的处理,然后就和之前的题目类似了。
P3157 [CQOI2011]动态逆序对
还是cdq分治以时间先排个序,然后在进行维护,唯一不同的点就是为了减小时间复杂度,先整出后来删掉后序列的逆序对,然后向前累加就好了。
P4093 [HEOI2016/TJOI2016]序列
中序遍历按照项从小到大转移,因此不用重新排序,另外我们分别用maxn和minn分别记录每一项的最大值以及最小值,然后用一个f数组记录以i结尾最长上升子序列的长度,然后哦cdq分治。
(动态)点分树
前置芝士
例题略解
P3241 [HNOI2015]开店
啥也不想说了,这破题,看yxc的讲解视频,看的差不多半个下午才感觉凑合懂了一点;然后尝试自己实现,然后又一次打开了他的视频。然后视频+VsCode=半个下午,共计一个下午,终于干出来了。
大概思路就是对于点u到v的距离,可以看作一个重心的两个子树里的两个点之间的距离,然后无限递归,直到u是某个树的重心为止,然后对于u到n个不同的v的距离,可以发现u到重心的路是必须经过的
因此我们可以暴力加和其他部分,然后对于重复的部分直接数量乘上长度就好了。为了查询更方便,我们对于每一个节点开两个vector数组分别用来维护自己和儿子,然后push_back进去一个-1和A+1当作两个边界,然后码就好了。就是这么简(du)单(liu)。
还有就是auto这种东西最好少用。。。
P3345 [ZJOI2015]幻想乡战略游戏
和上面那个题有一些相似,就是找带权重心嘛,也是开了两个vector分别记录某个节点的祖先以及子节点,然后就是一堆板子类的东西,求出size,重心那一类的东西。
最后在各个节点尝试枚举儿子,儿子的节点状态从父亲直接转移,需要多看一下初始化的主函数,细节比较多。。。
- 注意:不要全开long long 不然虽然在Luogu可以AC,但是在本地以及别的OJ(比如我们的校内OJ)就玄乎了。
点分治&cdq分治 总结的更多相关文章
- [bzoj] 3263 陌上花开 洛谷 P3810 三维偏序|| CDQ分治 && CDQ分治讲解
原题 定义一个点比另一个点大为当且仅当这个点的三个值分别大于等于另一个点的三个值.每比一个点大就为加一等级,求每个等级的点的数量. 显然的三维偏序问题,CDQ的板子题. CDQ分治: CDQ分治是一种 ...
- 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 ...
- [BZOJ3672][Noi2014]购票 斜率优化+点分治+cdq分治
3672: [Noi2014]购票 Time Limit: 30 Sec Memory Limit: 512 MBSubmit: 1749 Solved: 885[Submit][Status][ ...
- 【BZOJ4237】稻草人(CDQ分治,单调栈)
[BZOJ4237]稻草人(CDQ分治,单调栈) 题面 BZOJ 题解 \(CDQ\)分治好题呀 假设固定一个左下角的点 那么,我们可以找到的右下角长什么样子??? 发现什么? 在右侧是一个单调递减的 ...
- 一篇自己都看不懂的CDQ分治&整体二分学习笔记
作为一个永不咕咕咕的博主,我来更笔记辣qaq CDQ分治 CDQ分治的思想还是比较简单的.它的基本流程是: \(1.\)将所有修改操作和查询操作按照时间顺序并在一起,形成一段序列.显然,会影响查询操作 ...
- 浅谈CDQ分治与偏序问题
初识CDQ分治 CDQ分治是一个好东西,一直听着dalao们说所以就去学了下. CDQ分治是我们处理各类问题的重要武器.它的优势在于可以顶替复杂的高级数据结构,而且常数比较小:缺点在于必须离线操作. ...
- cdq分治略解
前言 陌上花开,可缓缓归矣 --吴越王 寓意:意思是:田间阡陌上的花开了,你可以一边赏花,一边慢慢回来. 隐意:春天都到了,你怎么还没有回来.形容吴越王 ...
- 『cdq分治和多维偏序问题』
更新了三维偏序问题的拓展 cdq分治 \(cdq\)分治是一种由\(IOI\ Au\)选手\(cdq\)提出的离线分治算法,又称基于时间的分治算法. 二维偏序问题 这是\(cdq\)分治最早提出的时候 ...
- [BZOJ1492] [NOI2007] 货币兑换Cash(cdq分治+斜率优化)
[BZOJ1492] [NOI2007] 货币兑换Cash(cdq分治+斜率优化) 题面 分析 dp方程推导 显然,必然存在一种最优的买卖方案满足:每次买进操作使用完所有的人民币:每次卖出操作卖出所有 ...
随机推荐
- 浅谈Java的诞生和现状
昨天在旅途中登录一下很久没用的boss直聘,看看行情,一天的时间,已经有20+家公司给我发出了面试邀请,先跟大家谈谈Java的诞生和现状. 传说,在二十世纪90年代,一个叫Sun的公司,成立了一个项目 ...
- [xml模块、hashlib模块、subprocess模块、os与sys模块、configparser模块]
[xml模块.hashlib模块.subprocess模块.os与sys模块.configparser模块] xml模块 XML:全称 可扩展标记语言,为了能够在不同的平台间继续数据的交换,使交换的数 ...
- NPM包管理器入门(附加cnpm : 无法加载文件错误解决方案)
NPM 包管理器 1.作用: 快速构建nodejs工程 快速安装和依赖第三个模块 2.使用方法 快速构建 npm init 会得到一package.json文件 { "name": ...
- 认识 Spring Cloud Alibaba
个人理解 Spring Cloud Alibaba 就是 Spring Cloud 的微服务规范的一种实现,外加一些阿里云的商业组件 Spring Cloud 是什么 Spring Cloud 为开发 ...
- 编译安装rsyslog
安装gcc-c++ 615 yum -y install gcc c++ 616 yum -y install gcc-c++ 安装libestr.libee wget http://libestr. ...
- iozone的使用与介绍-20191105
https://www.jianshu.com/p/faf82e400aa6 iozone的使用与介绍 0.0722017.05.10 07:40:41字数 550阅读 1817 iozone的使用与 ...
- Windows10查看电脑的USB接口是2.0还是3.0
Windows10查看电脑的USB接口是2.0还是3.0原创小晓酱手记 最后发布于2019-08-22 16:09:48 阅读数 3662 收藏展开 同事要拷贝资料给我,问我电脑的USB接口是2.0还 ...
- 042.Python进程队列介绍
进程队列介绍 1 基本语法及过程 先进先出,后进后出,q = Queue() 过程 (1)把数据放到q队列中 put (2)把书局从队列中拿出来 get from multiprocessing i ...
- Datatables 实现前端分页处理
引言 Datatables 是一款 jquery 表格插件.它是一个高度灵活的工具,可以将任何 HTML 表格添加高级的交互功能. 支持分页(包括即时搜索和排序) 支持几乎任何数据源(DOM.java ...
- 遇到问题 DS1302读取数据有问题
读出的数据 错误的原因 是因为 DS1302的初始化函数中 移植的时候 没有改要使能的端口号 但是我的板子用另一个(如下的工程单独下载进板子后可以运行)还是可以用的 原因是 而我那个 读数据全为 ...