关闭
当前搜索:

[交互 点分治] Codeforces 772E VK Cup 2017 - Round 2 E. Verifying Kingdom

本来的想法是能够找出叶子的兄弟 那么就把他们以及他们的父亲缩起来 但是很难找兄弟 看了题解发现是从初始一个点加点 相当于把缩的拆回去 通过点分治 我们找出当前树的重心 这里的重心是以叶子数量为权的 然后ask一下(g的左子树中的叶子,g的右子树中的叶子,当前要加的点) 有一些细节要处理 那么就可以确定当前点是在左子树 右子树还是子树外 询问复杂度O(nlogn)O(n\log n) 时...
阅读(193) 评论(0)

[二进制分组 线段树 || 点分治 分治] UOJ #191 【集训队互测2016】Unknown

详见lzz的集训队论文二进制分组做法二进制分组是在线段树的结构上做的 方便区间查询 至于删除 采用延迟重构的思想 每一层只有最后一个区间是萎的 我们需要递归下去 询问还是O(logn)O(\log n)个节点 重构复杂度势能分析下O(nlogn)O(n\log n) 只有上凸包是有效的 合并的时候采用归并加Graham可以做到O(n)O(n) 不然以我的常数 T的血惨 但是卡内存 只有90分#...
阅读(394) 评论(1)

[矩阵 点分治] 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的约数个数 然后就是树上的问题了 我们知道叉乘不满足结合律 打完之后才知道 汗 但是满足反交换律 然后我们就可以把叉乘表示成矩阵的形式 这是有结合律的 然后就是卡常历程 最后几乎就是照...
阅读(195) 评论(0)

[点分树 二分答案] BZOJ 2117 [2010国家集训队]Crash的旅游计划

二分答案后就转化为有多少个数到某点距离小于多少 这就是个裸的点分树啊 复杂度O(nlog3n)O(n \log ^3 n)#include #include #include #include using namespace std;inline char nc(){ static char buf[100000],*p...
阅读(266) 评论(0)

[点分治 离线] BZOJ 4449 [Neerc2015]Distance on Triangulation

其实简单的找一条边然后分成两半 被我硬生生写成对偶图点分治分成三块 233 就把所有询问一起处理 点分治时 如果两个点在同一侧 就递归 否则对三个点bfs就能知道最短路径#include #include #include #include #include #include #define c...
阅读(221) 评论(0)

[点分治] AOJ 2687 Balanced Paths

题目大意 求树上合法括号路径的个数 这个 直接考虑点分治 一个合法的括号序列被切成两半 一定可以分别削成长度相等的连续左括号和连续右括号 dfs的时候用两个变量维护类似栈的东西 我们需要两个这样的栈 分别表示从根读到子节点 和 从子节点读到根 两种方向 #include #include #include #include<cstrin...
阅读(121) 评论(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...
阅读(260) 评论(0)

[可持久化可并堆 || ST表 点分治] BZOJ 3784 树上的路径

显然是用堆来维护 每弹出一个解 加入其后继 怎么定义后继 经典做法是点分后维护一个类似超级钢琴的东西 首先对这棵树进行点分治,在分治的时候将所有点到根的距离依次放入一 个数组qq中 对于一棵子树里的点,合法的路径一定是qlql到qrqr的某个数加上自己到重心的距离 定义五元组(v,l,m,r,w)(v,l,m,r,w),表示当前路径长度为vv,在[l,r][l,r]里选出最...
阅读(238) 评论(0)

[点分治] HihoCoder #1462 Challenge 26 Rikka with Tree IV

考试的时候打死想不出来 然后Evan在边上随口就切掉了... 直接搬题解吧 考虑包含k 个点的链,可以得出任意距离不超过k...
阅读(302) 评论(0)

[点分树] BZOJ 3924 [Zjoi2015]幻想乡战略游戏

%%%CLJ 首先动态维护每个点的答案?动态树分治就好了 怎么找重心 对于分治结构的每一个点,我们枚举它的出边 如果某条出边连向的点的距离之和小于当前点,那么答案一定在那条出边指向的子树中,分治做下去就行了 这样是两个log再乘20的  实际上最优可以一个log 跑的竟然还没有当年不懂事打的暴力快 #include #include #include us...
阅读(215) 评论(0)

[点分树 树状数组] BZOJ 3730 震波

线段树T成翔 只能用vector写BIT 痛苦的回忆啊 思路不难想 先建出点分树 然后每个点对于他掌管的点的距离与权值建成BIT 然后每次查询就是爬点分树 这里有点注意 往树上爬的时候不能中途break,不会因为有一个祖先爬不上去就终止,说不定有一个爷爷比爸爸还近 #include #include #include #include using namespace std;...
阅读(159) 评论(0)

[并查集 || 点分治 树重心] 2015 计蒜之道 复赛 京东的物流路径

官方题解: 本题有多种解法。首先是点分治的思想,在点分治的时候,我们每一次选取一个中心,先统计过中心的路径最大值,然后删掉中心,递归处理其它子树。统计过中心的路径最大值,我们以中心为根深度搜索一遍,一个需要注意的地方是路径的两个端点不能在同一子树内,因为这样可能会重复统计。所以我们把路径按子树分类,然后点权排序以后更新路径按子树分类的最大值和次大值,之和与当前点权的乘积就是答案。 本题还可...
阅读(171) 评论(0)

[点分治] LA 7148 LRIP

题意就是要求一棵树上的最长不下降序列,同时不下降序列的最小值与最大值不超过D。 点分 记录经过重心结尾是多少的不降/不升的长度 然后用set维护一个单调的东西来查询 也可以用线段树维护 #include #include #include #include #include #define cl(x) memset(x,0,sizeof(x)) using namespace std;...
阅读(201) 评论(0)

[整体二分 || 树套树 || 点分治] BZOJ 4009 [HNOI2015]接水果

整体二分的做法题解很多:http://blog.csdn.net/thy_asdf/article/details/50363672 点分治么 还不会233 树套树么 ORZ 打的整体二分 #include #include #include using namespace std; inline char nc() { static char...
阅读(302) 评论(0)

[动态树分治] BZOJ4012 [HNOI2015]开店

膜PoPoQQQ:http://blog.csdn.net/popoqqq/article/details/45365043 省选前学动态树分治  跑起来飞快 45s+ 看着提交记录 只能说惨不忍睹 爆int呆滞了一早上 还有因为没删文件 没强制在线 RE的 动态树分治 印象中还有 幻想乡战略游戏和捉迷藏  代码注释一大片 丑我也不管了 #include #include #inclu...
阅读(1872) 评论(0)
    个人资料
    • 访问:309225次
    • 积分:12399
    • 等级:
    • 排名:第1311名
    • 原创:969篇
    • 转载:3篇
    • 译文:0篇
    • 评论:54条
    最新评论