倍增
ModestCoder_
一个modest的coder
展开
-
【题解】模拟赛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 · 215 阅读 · 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 · 193 阅读 · 0 评论 -
【题解】CF587C:Duff in the Army
原题传送门注意a<=10a<=10a<=10可以倍增的同时,暴力记录每个点往上跳2j2^j2j步范围内前10小的点集倍增跳的时候暴力合并Code:#include <bits/stdc++.h>#define maxn 100010using 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 · 336 阅读 · 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 · 183 阅读 · 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 · 161 阅读 · 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 · 187 阅读 · 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 · 295 阅读 · 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 · 173 阅读 · 0 评论 -
【题解】CF1059E:Split the Tree
原题传送门首先易知,某个点的权值大于S时,是-1情况贪心策略,在树上跑时,某个点有一堆儿子,肯定是和向上扩展能扩展得最远的儿子结合成一条链如果知道了每个点向上扩展最多能扩展到哪里,那么问题是多么简单啊!只需要记录每个点属于的链的顶端,dfs的时候看看能不能挑出属于链顶端深度最小的儿子,可以就把自己归到那条链,否则自己新开一条链至于如何得到每个点向上扩展最多能扩展到哪里,这个可以用倍增预处...原创 2019-07-29 12:47:10 · 264 阅读 · 0 评论 -
[题解]LuoGu1613:跑路
原题传送门倍增法说说我自己对倍增法的理解吧这应该是一个思想,用来加速个体的信息合并单个的个体,两个相同长度的区间的信息合并到一起,时间通常是O(logn)O(logn)O(logn)然后,倍增法应该得满足要求:信息可合并就没了本题,n<=50,肯定floydfloydfloyd所以我们需要知道那些点可以一步走到,接下来就是folyd的事情了如何预处理是个问题,但是题目中机...原创 2019-05-23 18:48:40 · 239 阅读 · 0 评论 -
[题解]LuoGu3066:[USACO12DEC]逃跑的BarnRunning Away From…
原题传送门此题简直一眼倍增//对于每个点,往上倍增跳,找到那个最远的与自己距离小于等于l的点那么这个点可以对自己到那个跳到的点那一段链上的点1的贡献现在的问题是如何把自己和上面满足要求的最远的点之间一段点的答案都加上1其实很简单,如果是一段序列上,区间加同一个数,然后最终单点求值是用差分数组做的那么这道题我们就用树上差分(默认你会树上差分)即可,最终dfs一遍统计一下就好了Code:...原创 2019-04-23 20:36:30 · 580 阅读 · 0 评论 -
【题解】LuoGu3252: [JLOI2012]树
原题传送门 题目描述在这个问题中,给定一个值S和一棵树。在树的每个节点有一个正整数,问有多少条路径的节点总和达到S。路径中节点的深度必须是升序的。假设节点1是根节点,根的深度是0,它的儿子节点的深度为1。路径不必一定从根节点开始。输入输出格式输入格式: 第一行是两个整数N和S,其中N是树的节点数。 第二行是N个正整数,第i个整数表示节点i的正整数。 接下来的N-1行每行是2个整数x...原创 2018-08-16 20:22:07 · 326 阅读 · 1 评论