分治
litble
Away From OI已久,一天天变菜中,博客平时不咋看,也没能力答疑和改错了,因此不会互动见谅orz
展开
-
洛谷1084/codevs1218 二分+倍增+贪心,分步讲解
题目分析我们要明确我们做什么,一步一步慢慢来,否则会被这题逼疯。1.预处理倍增我们会发现,离根节点越近的节点,控制的节点更多。所以由贪心的思想,所有的军队都要尽可能地往根节点走。 ”往上提“类型问题一般使用倍增优化。——xzy神犇(见传送门:xzy的博客)好大的,那么我们可以dfs一遍,将倍增要用的一些值都处理好(见代码)2.二分答案军队可以同时移动,说明我们要控制传染病的时间是军队移动到位时原创 2017-10-12 20:48:24 · 1431 阅读 · 0 评论 -
洛谷P4585/bzoj4137 火星商店问题 线段树+可持久化trie树
题目分析首先特殊商品显然可持久化trie树一波就行了。至于非特殊商品呢?时间线段树套可持久化trie?注意到本题没有要求强制在线,所以并不需要套呗。把询问都落到时间线段树的区间上(用vector存),然后将所有添加商品事件都按照商店编号排序。递归遍历时间线段树,遍历到一个区间(线段树的一个节点)时,将这个区间的所有添加商品事件建立可持久化trie树。然后处理这个节点上的所有询问。代码...原创 2018-12-14 08:26:24 · 575 阅读 · 0 评论 -
spoj树上查询系列题:QTREE
QTREE树有边权 CHANGE:将第x条边的边权改为y QUERY:询问两点之间路径上的最大边权。 为了练习树链剖分,就用树链剖分做了。还是不难的,链剖后就是线段树单点修改和区间查询最大值了。注意一点,我将每个边权赋给了这条边连接的两点中深度较大的那个,所以线段树操作的时候要注意不要操作lca(代码注释部分)#include<iostream>#include&a原创 2019-01-22 19:08:04 · 357 阅读 · 0 评论 -
bzoj3784 树上的路径 点分治+RMQ+优先队列
题目分析树上的路径路径?可以,这很点分治。求最长的mmm条的长度?可以,着很优先队列。但问题是,用优先队列只能做全局才能保证复杂度是对的,但点分治是分治就不能做全局。于是对于每次点分治,都记录下每一条从分治中心rtrtrt到点xxx的路径和其长度,将它们依次放在一个序列的末尾,以此类推继续分治。对于每一个分治中心,在处理它的时候记录下来的这些东西,两两合并可以组成一条路径。因为已经放在序...原创 2019-02-27 14:45:06 · 283 阅读 · 0 评论 -
洛谷P3676 小清新数据结构题 动态点分治
题目分析设整棵树的点权和为WWW,sis_isi表示以iii为根的子树的点权和,则无论哪个点为根,∑i=1nsi(W−si)=P\sum_{i=1}^n s_i(W-s_i) =P∑i=1nsi(W−si)=P都是个定值。这是因为可以看做当两个点i,ji,ji,j分别在以某个点为根的子树内外时,PPP加上vivjv_iv_jvivj的贡献,也就是说P=∑i=1n∑j=1ndist(...原创 2019-03-06 10:22:12 · 328 阅读 · 0 评论 -
codeforces1019E Raining season 边分治+闵可夫斯基和+凸包
题目分析假设你准备把所有“可能”成为最长路径的路径都提取出来,显然是用树分治啦,这题中,边分治比点分治更方便。边分治教学->here边分治的套路,第一步将多叉树转为二叉树,对于新增加出来的边,它的aaa和bbb都是0。然后集中处理经过某一条边的路径,一条边将整棵树分为两个部分,这条路径由在这两个部分里的部分组成,于是我们要合并两个部分的信息。什么是可能成为最长路径的路径?将每条路径看...原创 2019-03-14 14:50:32 · 778 阅读 · 0 评论 -
loj3059/bzoj5494/洛谷P5294 [HNOI2019]序列 单调栈+主席树
题目分析若a单调不升,如图,b全部相等显然比b不相等要优。那么∑i=1m(ai−b)2\sum_{i=1}^m (a_i-b)^2∑i=1m(ai−b)2,求导得∑ai2−2b(∑ai)+mb2\sum a_i^2-2b(\sum a_i)+mb^2∑ai2−2b(∑ai)+mb2,当导函数等于0时取到最小值,此时b=∑aimb=\frac{\sum a_i}{m}b=m∑ai也...原创 2019-05-04 15:38:16 · 380 阅读 · 0 评论 -
洛谷P3553/bzoj3414 [POI2013]Inspector 二分答案+贪心
题目分析首先二分答案,就可以只判断这几条可不可行了。根据每个人的称述,我们先可以给这些人确定一个大致的“必须存在的区间”,而那些没有称述的人,根据boshi命名法,称其为“幽灵”。假设当前检查的时刻iii,必须存在的人数为sis_isi。nows:由于“必须存在的区间”,而导致当前时刻至少有多少人存在。people:当前已经被“使用”了的人数。ghost:当前使用了,且其所在区间还在...原创 2019-05-13 20:02:41 · 383 阅读 · 0 评论 -
《从Unknown谈一类支持末尾插入删除的区间信息维护方法》学习笔记+UOJ #191代码(及HACK5原理,雾)
笔记做带末尾插入删除的区间信息维护)的数据结构题的方法:分块思路:每次插删操作暴力重构最后一块。支持插删操作,支持区间查询,支持在线二进制分组思路:若每次添加一个元素进数据结构里的复杂度比较高,则每次将这个元素单独放在最后一组,若最后一组与上一组的大小相同,就将这两组合并为同一组,不难发现最后得到的每个组大小都是2的次幂,并且互不相同,复杂度会是log\loglog级的。不支持删除...原创 2019-05-21 20:04:53 · 452 阅读 · 0 评论 -
bzoj3958 Mummy Madness 二分答案+扫描线
题目分析在T时刻,每一个木乃伊可能处于的位置,和你可能处于的位置,都是个正方形。如果木乃伊们的正方形将你的正方形完全覆盖,你无处落脚,必定死亡。而T+1时刻,因为T时刻木乃伊可能在的每个格子的周围8个格子,此时都可能有木乃伊了,所以,不可能在T时刻没有你可以待的地方,T+1时刻就有了。因此,你有无可落脚的格子这个状态是单调的,可以二分。二分答案,求出所有木乃伊的矩形和你的矩形的并,然后扫描线...原创 2018-12-07 20:09:36 · 345 阅读 · 0 评论 -
[HN省队集训day7] 分岔路口 期望+二分+点分治
题目描述三种选择都没戏,分岔路口难救命。天要我输我不语,下个悲剧就是你。 给定一棵树,多次询问从一个点移动到另一个点最优策略的期望步数。 你有两种移动方法:沿着一条边,从一端走到另一端,花费一步;或者均匀随机选择一个点,闪现到那里,花费一步。数据范围n≤100000,q≤200000n≤100000,q≤200000n \leq 100000,q \leq 200000,时限4s。...原创 2018-06-27 09:12:43 · 648 阅读 · 0 评论 -
bzoj2653 主席树 【附赠数据生成器】
题目分析要想要中位数尽可能大,就要让大的数尽量多,小的数尽量少。 而这个大小是相对于中位数而言的,所以我们可以用二分的方法先确定这个中位数x。然后,将所有大于等于x的数视作1,将所有小于x的数视作-1,这样,假若我们在满足条件的情况下可以找到一个区间和大于等于0的区间,说明可以增大x的值。否则,只能减小x的值。 那么,怎么确定区间呢?可以考虑对于原序列的每一个x都整一个1或-1的序列出来,原创 2018-01-05 20:15:08 · 323 阅读 · 0 评论 -
bzoj3196/洛谷P3380 线段树套splay 【附赠数据生成器】
假标题:震惊!一只蒟蒻两天刷新两次最长代码记录,这究竟是数据结构的扭曲还是代码能力的沦丧?题目分析线段树,套splay嘛。如题所言,我们就弄一棵线段树,然后线段树的每一个节点都是一棵splay,这样就方便完成各种操作。 那么这道题(应该)唯一要讲解的就是第二个操作啦,第二个操作就是二分答案+第一个操作。其他的让代码来解答吧。代码#includeusing namespace原创 2018-01-06 10:03:11 · 487 阅读 · 0 评论 -
分治挑战数据结构——小记整体二分和CDQ分治
整体二分例题:bzoj3110/洛谷P3332 数据结构解决:线段树套splay 整体二分,顾名思义,就是把所有的东西拿来一起二分。在这道题里我们还要开一棵线段树。 1.把所有添加操作和询问顺序存进Q中。 2.二分一个答案,顺序处理所有操作 2-1.对于查询操作,我们在线段树查询一下区间和(代表在这个区间里,小于mid的数的个数),依据这个个数进行分类。代码表示如下:if原创 2018-01-09 20:59:23 · 1685 阅读 · 1 评论 -
bzoj3697 点分治
解题思路祝各位狗年快乐蛤^(* ̄w ̄)^ 研读hzwer的题解半小时,终于明白这题怎么做了…… 把边权为0的边的边权改成-1,然后点分治,再考虑经过当前点x,在x子树中的这样的路径。 开两个数组f(i,0/1)f(i,0/1)f(i,0/1)和g(i,0/1)g(i,0/1)g(i,0/1) f的意思是,从x子树中某个点y走到x的路径,路径上的边权和为i,0和1代表这条路径是否有一个与...原创 2018-02-17 21:30:51 · 316 阅读 · 0 评论 -
洛谷P3714/loj2179/bzoj4860 树的难题 点分治+单调队列
题目分析点分是个好东西。现在在点分的过程中,我们找到了一个点作为根,然后它有若干子树。显然子树连着根的那条边的颜色影响答案统计,异色子树(即子树根节点与根节点之间的边异色)和同色子树需要分开处理。把所有子树按照该颜色中最深子树的深度为第一关键字,该子树深度为第二关键字,从小到大排序。然后按照这种顺序进行处理。维护两个值v0(x)和v1(x),分别表示同色和异色子树中的路径里,可以与...原创 2018-04-08 13:21:41 · 469 阅读 · 0 评论 -
bzoj3597/loj2214/洛谷P3288 方伯伯运椰子 分数规划+spfa判负权环
一看这题感觉要分数规划,于是迅速上套路: 二分一个答案lim,如果存在X−Yk≥limX−Yk≥lim\frac{X-Y}{k} \geq lim,则存在(X−Y)−lim∗k≥0(X−Y)−lim∗k≥0(X-Y)-lim*k \geq 0 然后发现压缩相当于网络流中的退流,扩容则相当于增广。当然也可以本质的理解,一开始所有点上的“囤积流量”都是0,如果压缩,那么v的“囤积流量”-1,u的“...原创 2018-04-28 15:36:24 · 232 阅读 · 0 评论 -
loj2249/洛谷P2305/bzoj3672 购票 斜率优化+点分治
DP方程显然:fi=min(fj+(disi−disj)∗pi+qi)fi=min(fj+(disi−disj)∗pi+qi)f_i=min(f_j+(dis_i-dis_j)*p_i+q_i),dis是根到每个点的距离。 假设j的深度比k大且j这个决策比k更优,那么就有: fj+dipi−djpi+qi<fk+dipi−dkpi+qifj+dipi−djpi+qi<fk+dipi...原创 2018-06-09 12:58:58 · 1099 阅读 · 1 评论 -
边分治学习笔记(bzoj2870)
如果点分治的话,那个取最小点权操作很难合并,不过树可以点分治,那自然也可以边分治。我们每次找到一条边,使得删掉这条边后的两个连通块中最大的那个的大小尽可能小,然后处理经过这条边的路径信息…… 桥豆麻袋,这个复杂度好像不太对啊。 在菊花图上,好像可以轻易变成O(n)O(n)O(n)的啊!!! 于是我们就要把树做一下转化,如果一个点有太多个儿子,我们就建立若干个虚拟点来管理它的儿子们,这样这棵树...原创 2018-06-29 10:49:22 · 3777 阅读 · 0 评论 -
bzoj3636 教义问答手册 分治
题目分析分块一种虽然过不了但是很喵的做法。设f[l,r]f[l,r]f[l,r]表示区间[l,r][l,r][l,r]的答案。bib_ibi表示区间[i−L+1,i][i-L+1,i][i−L+1,i]的权值和。则有f[l,r]=max(f[l,r−1],f[l,r−L]+br)f[l,r]=max(f[l,r-1],f[l,r-L]+b_r)f[l,r]=max(f[l,r−1],...原创 2019-05-23 11:03:00 · 431 阅读 · 0 评论