![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
点分治
里阿奴摩西
这个作者很懒,什么都没留下…
展开
-
[动态树分治] BZOJ4012 [HNOI2015]开店
膜PoPoQQQ:http://blog.csdn.net/popoqqq/article/details/45365043省选前学动态树分治 跑起来飞快 45s+看着提交记录 只能说惨不忍睹 爆int呆滞了一早上 还有因为没删文件 没强制在线 RE的动态树分治 印象中还有 幻想乡战略游戏和捉迷藏 代码注释一大片 丑我也不管了#include#include#inclu原创 2016-03-15 12:16:34 · 2455 阅读 · 0 评论 -
[二进制分组 线段树 || 点分治 分治] UOJ #191 【集训队互测2016】Unknown
详见lzz的集训队论文二进制分组做法二进制分组是在线段树的结构上做的 方便区间查询 至于删除 采用延迟重构的思想 每一层只有最后一个区间是萎的 我们需要递归下去 询问还是O(logn)O(\log n)个节点 重构复杂度势能分析下O(nlogn)O(n\log n) 只有上凸包是有效的 合并的时候采用归并加Graham可以做到O(n)O(n) 不然以我的常数 T的血惨 但是卡内存 只有90分#原创 2017-05-28 11:15:45 · 3447 阅读 · 0 评论 -
[点分树 二分答案] BZOJ 2117 [2010国家集训队]Crash的旅游计划
二分答案后就转化为有多少个数到某点距离小于多少 这就是个裸的点分树啊 复杂度O(nlog3n)O(n \log ^3 n)#include<cstdio>#include<cstdlib>#include<algorithm>#include<vector>using namespace std;inline char nc(){ static char buf[100000],*p原创 2017-03-13 13:32:33 · 657 阅读 · 0 评论 -
[点分治 离线] BZOJ 4449 [Neerc2015]Distance on Triangulation
其实简单的找一条边然后分成两半 被我硬生生写成对偶图点分治分成三块 233 就把所有询问一起处理 点分治时 如果两个点在同一侧 就递归 否则对三个点bfs就能知道最短路径#include<cstdio>#include<cstdlib>#include<algorithm>#include<cstring>#include<map>#include<vector>#define c原创 2017-03-06 20:43:57 · 702 阅读 · 0 评论 -
[替罪羊树 动态点分治 替罪羊式重构] BZOJ 3435 [Wc2014]紫荆花之恋 & UOJ #55 【WC2014】紫荆花之恋
网上题解都说的很详细了吧 考虑点分治 dist(i,j)≤Ri+Rjdist(i,j) ≤ R_i+R_j 可以转化成Dj−Rj≤Ri−DiD_j-R_j ≤ R_i-D_i 其中DiD_i表示到重心的距离 开两颗平衡树维护 一颗统计 一颗去重 然后 因为要动态加点 点分树的性质不能保证 所以当一个子树的大小超过某个阈值时 就把点分树替罪羊式重构下 说起来真轻巧#include<cs原创 2017-02-26 19:19:02 · 577 阅读 · 0 评论 -
[矩阵 点分治] BZOJ 4623 Styx
首先我们可以发现g=(x∗ϕ)∗1=(ϕ∗1)∗x=x∗xg=(x*\phi)*1=(\phi*1)*x=x*x 所以 g(n)=n∗d0(n)g(n)=n*d_0(n) 其中 d0(n)d_0(n) 表示nn的约数个数 然后就是树上的问题了 我们知道叉乘不满足结合律 打完之后才知道 汗 但是满足反交换律 然后我们就可以把叉乘表示成矩阵的形式 这是有结合律的 然后就是卡常历程 最后几乎就是照原创 2017-03-17 20:37:13 · 424 阅读 · 0 评论 -
[点分治] AOJ 2687 Balanced Paths
题目大意 求树上合法括号路径的个数 这个 直接考虑点分治 一个合法的括号序列被切成两半 一定可以分别削成长度相等的连续左括号和连续右括号 dfs的时候用两个变量维护类似栈的东西 我们需要两个这样的栈 分别表示从根读到子节点 和 从子节点读到根 两种方向 #include<cstdio>#include<cstdlib>#include<algorithm>#include<cstrin原创 2017-03-03 20:53:31 · 318 阅读 · 0 评论 -
[可持久化可并堆 || ST表 点分治] BZOJ 3784 树上的路径
显然是用堆来维护 每弹出一个解 加入其后继 怎么定义后继 经典做法是点分后维护一个类似超级钢琴的东西 首先对这棵树进行点分治,在分治的时候将所有点到根的距离依次放入一 个数组qq中 对于一棵子树里的点,合法的路径一定是qlql到qrqr的某个数加上自己到重心的距离 定义五元组(v,l,m,r,w)(v,l,m,r,w),表示当前路径长度为vv,在[l,r][l,r]里选出最原创 2017-02-23 12:54:28 · 748 阅读 · 0 评论 -
[点分树] BZOJ 3924 [Zjoi2015]幻想乡战略游戏
%%%CLJ首先动态维护每个点的答案?动态树分治就好了怎么找重心对于分治结构的每一个点,我们枚举它的出边如果某条出边连向的点的距离之和小于当前点,那么答案一定在那条出边指向的子树中,分治做下去就行了这样是两个log再乘20的 实际上最优可以一个log跑的竟然还没有当年不懂事打的暴力快#include #include #includeus原创 2016-12-27 14:08:33 · 483 阅读 · 0 评论 -
[点分树 树状数组] BZOJ 3730 震波
线段树T成翔 只能用vector写BIT 痛苦的回忆啊思路不难想 先建出点分树 然后每个点对于他掌管的点的距离与权值建成BIT然后每次查询就是爬点分树这里有点注意往树上爬的时候不能中途break,不会因为有一个祖先爬不上去就终止,说不定有一个爷爷比爸爸还近#include#include#include#includeusing namespace std;原创 2016-12-25 12:06:55 · 523 阅读 · 0 评论 -
[点分治] HihoCoder #1462 Challenge 26 Rikka with Tree IV
考试的时候打死想不出来 然后Evan在边上随口就切掉了...直接搬题解吧考虑包含k 个点的链,可以得出任意距离不超过k原创 2017-01-03 16:16:09 · 713 阅读 · 0 评论 -
[并查集 || 点分治 树重心] 2015 计蒜之道 复赛 京东的物流路径
官方题解:本题有多种解法。首先是点分治的思想,在点分治的时候,我们每一次选取一个中心,先统计过中心的路径最大值,然后删掉中心,递归处理其它子树。统计过中心的路径最大值,我们以中心为根深度搜索一遍,一个需要注意的地方是路径的两个端点不能在同一子树内,因为这样可能会重复统计。所以我们把路径按子树分类,然后点权排序以后更新路径按子树分类的最大值和次大值,之和与当前点权的乘积就是答案。本题还可原创 2016-11-10 18:14:03 · 423 阅读 · 0 评论 -
[整体二分 || 树套树 || 点分治] BZOJ 4009 [HNOI2015]接水果
整体二分的做法题解很多:http://blog.csdn.net/thy_asdf/article/details/50363672点分治么 还不会233树套树么 ORZ打的整体二分#include#include#includeusing namespace std;inline char nc(){ static char原创 2016-05-16 21:38:12 · 604 阅读 · 0 评论 -
[点分治] LA 7148 LRIP
题意就是要求一棵树上的最长不下降序列,同时不下降序列的最小值与最大值不超过D。点分 记录经过重心结尾是多少的不降/不升的长度 然后用set维护一个单调的东西来查询 也可以用线段树维护#include#include#include#include#include#define cl(x) memset(x,0,sizeof(x))using namespace std;原创 2016-07-13 16:26:13 · 391 阅读 · 0 评论 -
[交互 点分治] Codeforces 772E VK Cup 2017 - Round 2 E. Verifying Kingdom
本来的想法是能够找出叶子的兄弟 那么就把他们以及他们的父亲缩起来 但是很难找兄弟 看了题解发现是从初始一个点加点 相当于把缩的拆回去 通过点分治 我们找出当前树的重心 这里的重心是以叶子数量为权的 然后ask一下(g的左子树中的叶子,g的右子树中的叶子,当前要加的点) 有一些细节要处理 那么就可以确定当前点是在左子树 右子树还是子树外 询问复杂度O(nlogn)O(n\log n) 时原创 2017-06-13 22:34:32 · 654 阅读 · 0 评论