
倍增
丰川样子小孩姐
阿里嘎多扩赛以马斯
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【题解】模拟赛11.22 T4 星际战争
首先想想暴力做法 先以1为起点跑一遍bfsbfsbfs 枚举每个除1以外的点作为基地,跑一遍bfsbfsbfs统计答案 复杂度为O(n2)O(n^2)O(n2),可以拿到20分的好成绩 然后第二部分的bfsbfsbfs可以优化, 当前如果跑到一个已经不可能保护的点,就是路径长大于和1的距离,就不必再继续跑下去了,结果就过了80分 然后是一棵树的部分,还是先以1为起点,建树建好 考虑对于一个非1的点xxx,可以保护哪些点 令dis[x][y]dis[x][y]dis[x][y]表示两点最短距离 F(x,..原创 2020-11-25 11:54:22 · 247 阅读 · 0 评论 -
【题解】CF1000G:Two-Paths
原题传送门 这道题目和保卫王国非常的相似 倍增dp 记lll为w(u,v)w(u,v)w(u,v) fuf_ufu表示,从uuu出发回到uuu,走以uuu为根的子树的答案 fu+=max(0,fv−2l)f_u+=max(0,f_v-2l)fu+=max(0,fv−2l) fau,ifa_{u,i}fau,i表示,从uuu,往上的第2i2^i2i个祖先 dpu,idp_{u,i}dpu,i表示,从uuu跑到fau,ifa_{u,i}fau,i,中途可以跑子树的答案 dpu,i=dpu,i−1+原创 2020-09-24 19:45:42 · 217 阅读 · 0 评论 -
【题解】CF587C:Duff in the Army
原题传送门 注意a<=10a<=10a<=10 可以倍增的同时,暴力记录每个点往上跳2j2^j2j步范围内前10小的点集 倍增跳的时候暴力合并 Code: #include <bits/stdc++.h> #define maxn 100010 using namespace std; struct Edge{ int to, next; }edge[maxn << 1]; struct data{ int num[15], tot; }ans, node[ma原创 2020-09-02 19:42:31 · 376 阅读 · 0 评论 -
【题解】LuoGu2048:[NOI2010]超级钢琴
原题传送门 这道题目的id昭示着它的非同凡响 我可以把这题和别的几题结合起来,产生一种利用堆的节点最优思想 序列合并 最小函数值 以上是两道和这题有共同思想的 本题是要求出前kkk大的sumj−sumi−1sum_j-sum_{i-1}sumj−sumi−1的和 对于每个节点iii,首先寻出[i+l−1,i+r−1][i+l-1,i+r-1][i+l−1,i+r−1]区间内的pospospos,使得sumpos−sumi−1>=sumj−sumi−1(i+l−1<=j<=i+r−1)s原创 2020-08-30 18:58:21 · 206 阅读 · 0 评论 -
【题解】LuoGu5024:保卫王国
原题传送门 这里不讲ddp,用倍增优化树形dp解决 令fu,0/1f_{u,0/1}fu,0/1表示uuu的子树,自身选不选的最小代价 令gu,0/1g_{u,0/1}gu,0/1表示整棵树−u-u−u的子树,uuu选不选的最小代价 令dpu,i,0/1,0/1dp_{u,i,0/1,0/1}dpu,i,0/1,0/1表示anc(anc为u往上跳2i步的祖先)anc(anc为u往上跳2^i步的祖先)anc(anc为u往上跳2i步的祖先)的子树−u-u−u的子树,u与ancu与ancu与anc分别选不原创 2020-08-04 16:50:00 · 180 阅读 · 0 评论 -
【题解】LuoGu3509:[POI2010]ZAB-Frog
原题传送门 m<=1018m<=10^{18}m<=1018,想到倍增 先预处理出每个点跳一次到达的点 倍增过程参考快速幂方法 现在考虑如何求出每个点跳一次会跳到那个点 一般会想到直接暴力套几个数据结构,比如主席树之类的 但是我们朴素一点,可以用单调队列思想 记两个头尾指针l,r(r−l=k)l,r(r-l=k)l,r(r−l=k),框定当前点距离最小的kkk个点 初始时l=1,r=k+1l=1,r=k+1l=1,r=k+1 每次枚举的点往后移一位时,把r+1与lr+1与lr+1与l到当原创 2020-07-31 18:38:54 · 213 阅读 · 0 评论 -
【题解】LuoGu5465: [PKUSC2018]星际穿越
原题传送门 重要性质:对于某个点xxx,必定是xxx到[y,x)[y,x)[y,x)中所有点的距离为1,xxx到[z,y)[z,y)[z,y)中所有点距离为2…… (满足z<y<xz<y<xz<y<x) 首先想70分暴力做法(性质的不完全利用) 处理出disti,jdist_{i,j}disti,j表示iii到jjj的最短路 策略是最多向右走一次,尽可能向左走...原创 2019-12-10 21:31:42 · 325 阅读 · 0 评论 -
【题解】LuoGu4281:[AHOI2008]紧急集合 / 聚会
原题传送门 这题挺简单 首先,任意三个点可以有一个通式,看下图 假设我们现在询问1 2 3三点 发现它们走到4这个点是最优的,而4又是1与2的lca 找找4这个点有什么性质 lca(1,2)=4,lca(1,3)=5,lca(2,3)=5lca(1,2)=4,lca(1,3)=5,lca(2,3)=5lca(1,2)=4,lca(1,3)=5,lca(2,3)=5 发现三点任意两点的lca有两个...原创 2019-07-23 15:00:52 · 221 阅读 · 0 评论 -
【题解】CF1059E:Split the Tree
原题传送门 首先易知,某个点的权值大于S时,是-1情况 贪心策略,在树上跑时,某个点有一堆儿子,肯定是和向上扩展能扩展得最远的儿子结合成一条链 如果知道了每个点向上扩展最多能扩展到哪里,那么问题是多么简单啊! 只需要记录每个点属于的链的顶端,dfs的时候看看能不能挑出属于链顶端深度最小的儿子,可以就把自己归到那条链,否则自己新开一条链 至于如何得到每个点向上扩展最多能扩展到哪里,这个可以用倍增预处...原创 2019-07-29 12:47:10 · 296 阅读 · 0 评论 -
[题解]LuoGu1613:跑路
原题传送门 倍增法 说说我自己对倍增法的理解吧 这应该是一个思想,用来加速个体的信息合并 单个的个体,两个相同长度的区间的信息合并到一起,时间通常是O(logn)O(logn)O(logn) 然后,倍增法应该得满足要求:信息可合并 就没了 本题,n<=50,肯定floydfloydfloyd 所以我们需要知道那些点可以一步走到,接下来就是folyd的事情了 如何预处理是个问题,但是题目中机...原创 2019-05-23 18:48:40 · 269 阅读 · 0 评论 -
[题解]LuoGu3066:[USACO12DEC]逃跑的BarnRunning Away From…
原题传送门 此题简直一眼倍增// 对于每个点,往上倍增跳,找到那个最远的与自己距离小于等于l的点 那么这个点可以对自己到那个跳到的点那一段链上的点1的贡献 现在的问题是如何把自己和上面满足要求的最远的点之间一段点的答案都加上1 其实很简单,如果是一段序列上,区间加同一个数,然后最终单点求值是用差分数组做的 那么这道题我们就用树上差分(默认你会树上差分)即可,最终dfs一遍统计一下就好了 Code:...原创 2019-04-23 20:36:30 · 609 阅读 · 0 评论 -
【题解】LuoGu3252: [JLOI2012]树
原题传送门 题目描述 在这个问题中,给定一个值S和一棵树。在树的每个节点有一个正整数,问有多少条路径的节点总和达到S。路径中节点的深度必须是升序的。假设节点1是根节点,根的深度是0,它的儿子节点的深度为1。路径不必一定从根节点开始。 输入输出格式 输入格式: 第一行是两个整数N和S,其中N是树的节点数。 第二行是N个正整数,第i个整数表示节点i的正整数。 接下来的N-1行每行是2个整数x...原创 2018-08-16 20:22:07 · 357 阅读 · 1 评论