![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
分治
文章平均质量分 78
qkoqhh
这个作者很懒,什么都没留下…
展开
-
hdu1007(平面最近点对->分治)
主要想弄出一个最近点对的模板出来。。。主要运用分治思想。。思路大概是这样的:先把点按x排序,然后按x进行分治。。。分当然简单。。难点就在合并了。。怎么合并?先找出中点,然后以已经求得的局部最短距离d为基准,将与中点的x距离不超过d的加入集合,然后按y对该点集进行排序,然后枚举点i,再枚举点j,维护最短距离d,如果y距离超过d便不再枚举。。语文不好。。。如果流程不清楚可以看代码或其他原创 2018-02-14 00:23:28 · 324 阅读 · 0 评论 -
hdu5977(点分治+状压DP+树形背包DP)
找点对数很容易想到点分治,k<10很容易想到状压,那么就维护根为x向下的有对应颜色状态的方案数有多少,可以用树背包DP维护即可。。然后统计的时候可以借用树分治的套路,在边dfs的时候和已统计出来的树链合并就可以了。。 #include<bits/stdc++.h>using namespace std;#define inc(i,l,r) for(int...原创 2018-09-22 19:02:18 · 405 阅读 · 0 评论 -
bzoj4182(点分治+树背包DP)
首先根据xy之间的点必取可以得到取的点必定是联通块上的点,那么就变成了联通块上的树背包DP,可以用点分治做。。然后这个可以借鉴hdu6268的做法,把背包转给子树然后自己去往外延伸,得到的就是包含根的联通块,然后再用点分治去处理不包含联通块的部分即可。。。转移给子树的时候需要注意到由于这个背包是经过二进制压缩后的,被分成若干个物品,所以转移的时候不能简单地赋值什么的。。应该是可以叠加地转移,即...原创 2018-09-23 11:29:52 · 490 阅读 · 0 评论 -
hdu6268(点分治+树DP+bitset)
这是一道非常好的题,V8强力推荐。。题目链接:http://acm.hdu.edu.cn/downloads/CCPC2018-Hangzhou-ProblemSet.pdf(pdf不好复制所以就贴链接了。。一个很显然的思路是树上跑背包,然而O()绝对是会T的。。所以直接背包肯定是不行的。。背包的合并代价实在太高了。。然后万能的V8告诉窝萌可以借鉴链合并的方式来代替背包的工作,即不...原创 2018-08-05 20:01:31 · 772 阅读 · 0 评论 -
hdu6305(笛卡尔树/分治)
这道需要注意到一点。。就是如果询问的区间如果覆盖了最大数,那么rmq一定是确定的。。故以这个最大数为分界,左右2个区间是完全独立的。。因此就可以采用分治的做法去做。。聪明的汪聚聚已经实现。。然后dls还给我们介绍了另一个数据结构——笛卡尔树。。这也是个二叉排序树。。然而其关键字满足堆的性质。。即根的权值最大。。然后用这个可以很轻松的表示出B数组元素需要满足的关系,即根是子树中最大的。。满足...原创 2018-07-24 15:09:00 · 779 阅读 · 0 评论 -
bzoj2599(点分治)
菜蛙一个错误debug半天qaq其实很好写。。对没层分治而言,只需要统计到当前根的距离为i所需要的最少边数即可。。不过初始化稍微麻烦一点。。把子数中所有点都存下来然后直接把这几个点对应的距离初始化一下即可。。这样才能把复杂度降到O(nlogn)然而还是跑得太慢了。。估计选根这里写的常熟有点大?/** * ┏┓ ┏┓ * ┏┛┗━━━━━━━┛┗━━━┓...原创 2018-06-20 16:30:50 · 226 阅读 · 0 评论 -
bzoj2152(点分治)
点分治持续开坑。。这个直接按余数存点数就可以了。。然后同样的点分治套路。。然后貌似树dp可以O(n)过。。还是太菜。。/** * ┏┓ ┏┓ * ┏┛┗━━━━━━━┛┗━━━┓ * ┃ ┃ * ┃ ━ ┃ * ┃ > < ┃ * ┃ ...原创 2018-06-16 16:14:33 · 151 阅读 · 0 评论 -
poj1741(点分治)
点分治和树dp的关联还是有点大。。所以这锅还是窝的。。点分治主要用于处理点对问题。。点分治比较套路。。做几道题应该就没什么问题了?基本思想就是选取一个点(为重心时复杂度最佳)为根,然后把问题分解成处理经过根的链和去掉根后的子树中的子问题。。然后最关键的就是怎么求经过根的链了。。。这里用的是dfs处理出深度然后将深度和小于k的记录下来,然后排序之后就可以直接用双指针计数了。。复杂度是O(n)然而会发...原创 2018-06-16 00:18:33 · 183 阅读 · 0 评论 -
bzoj4016(最短路+点分治)
题意看了好久才懂。。。先跑个最短路把树建出来。。然后就直接点分治。。记录包含k个点的最长路径及其方案数,然后直接用m-dist找就行了。。不难。。/** * ┏┓ ┏┓ * ┏┛┗━━━━━━━┛┗━━━┓ * ┃ ┃ * ┃ ━ ┃ * ┃ > < ┃ * ...原创 2018-06-23 00:46:46 · 282 阅读 · 0 评论 -
bzoj1316(点分治)
感觉自己点分治还是太慢了。。这个可以弄成m次点分治做,不过合在一起做效果更佳。。。/** * ┏┓ ┏┓ * ┏┛┗━━━━━━━┛┗━━━┓ * ┃ ┃ * ┃ ━ ┃ * ┃ > < ┃ * ┃ ┃ * ┃....原创 2018-06-20 18:13:30 · 206 阅读 · 0 评论 -
某叫不出名字的冬令营J(离线+分治+背包DP)
链接:http://codeforces.com/gym/101741/problem/J题意:给定一个序列,q次询问,每次询问从[l,r]从选若干个数使得这些数能被m整除的方案数这个一开始就想到线段树+背包合并,复杂度O(nm^2logn),算了下好像很极限。。写了下超了7倍时限。。线段树常数还是太大了TAT然后正解是分治,由于背包合并的代价太大,我们更倾向于选择一个一个元素往上加,...原创 2018-11-01 19:42:24 · 201 阅读 · 0 评论