算法-倍增
Maxwei_wzj
AFO
展开
-
【POJ1330】Nearest Common Ancestors-LCA算法
【POJ1330】Nearest Common Ancestors-LCA算法原创 2016-08-04 13:59:31 · 358 阅读 · 0 评论 -
【BZOJ4569】萌萌哒(SCOI2016)-并查集+倍增
测试地址:萌萌哒 做法:本题需要用到并查集+倍增。 容易想到用并查集来维护相等的集合,因为首位不能为000,所以令集合数为sss,答案就是9×10s−19×10s−19\times 10^{s-1}。 但是维护单点的并查集太慢了,因为条件非常多,怎么办呢?这时候我们就要分析条件的性质了。两个区间内的元素一一相等,我们可以借助ST表的思想,把一个区间拆成前2x2x2^x位和后2x2x2^x位,...原创 2018-05-12 11:51:46 · 243 阅读 · 0 评论 -
【BZOJ4650】优秀的拆分(NOI2016)-后缀数组+RMQ+差分
测试地址:优秀的拆分 做法:本题需要用到后缀数组+RMQ+差分。 容易想到,令pre(i),nxt(i)pre(i),nxt(i)pre(i),nxt(i)分别为以点iii结尾或开头的形如AAAAAA的字符串数,那么答案就是∑pre(i)nxt(i+1)∑pre(i)nxt(i+1)\sum pre(i)nxt(i+1)。那么我们怎么求这两个数组呢? 对于一个长为LLL的字符串AAA,在它之...原创 2018-05-12 21:25:08 · 296 阅读 · 0 评论 -
【BZOJ1178】会议中心(APIO2009)-贪心+倍增+set
测试地址:会议中心 做法:本题需要用到贪心+倍增+set。 如果这题单纯只求最多的线段数,相信大家都会贪心求了,但是鉴于我太弱今天才会,这里还是写一下吧。 把所有线段按左端点从小到大排序,按右端点为第二关键字从大到小排序,我们首先维护一个栈,是为了把所有包含其它线段的线段删掉,因为选这些线段一定不优。删完之后,这些线段的左右端点都是单调的了。那么我们贪心从小到大选择,一旦能选某条线段就马上选...原创 2018-05-13 10:02:42 · 751 阅读 · 0 评论 -
【BZOJ4556】字符串(TJOI&HEOI2016)-后缀数组+二分+RMQ+主席树
测试地址:字符串 做法:本题需要用到后缀数组+二分+RMQ+主席树。 注意到要求s(a,b)s(a,b)s(a,b)的每个子串和s(c,d)s(c,d)s(c,d)的LCP最大值,其实就是求s(a,b)s(a,b)s(a,b)的每个后缀和s(c,d)s(c,d)s(c,d)的LCP最大值。要求LCP我们通常要先对字符串求出后缀数组,然后在heightheightheight上做RMQ,可以做到...原创 2018-05-14 16:51:28 · 242 阅读 · 0 评论 -
【BZOJ4539】树(HNOI2016)-主席树+LCA
测试地址:树 做法:本题需要用到主席树+LCA。 要求两点间的距离,显然要维护每个点的深度,以及要求两个点的LCA。 我们把一开始的树看成一块,然后每次操作,都是在某一块下面挂一个新的块,每个块都是模板树的一棵子树。这样我们可以先把块缩成点,那么缩块后整棵大树就变成了一棵更小的树。考虑求一个点的深度,这个深度等于它到它所在块的根的距离,加上块根到整棵树根节点的距离,显然前面的部分可以直接在模...原创 2018-05-29 15:49:11 · 276 阅读 · 0 评论 -
【BZOJ3456】城市规划-多项式求逆
测试地址:城市规划 题目大意:求nnn个点带标号简单无向连通图(即无重边,无自环)的数目。 做法:本题需要用到多项式求逆。 如果不要求连通,这题就是水题了,答案显然为2C2n2Cn22^{C_n^2}(即枚举每条边选或不选)。 然而这题显然没那么简单,我们令f(n)f(n)f(n)为我们要求的答案,g(n)=2C2ng(n)=2Cn2g(n)=2^{C_n^2},有如下递推式: g(n)...原创 2018-06-20 19:17:27 · 293 阅读 · 0 评论 -
【BZOJ3545/BZOJ3551】Peaks(ONTAK2010)-Kruskal重构树+主席树
测试地址:Peaks原版,Peaks加强版 题目大意:一张n(≤105)n(≤105)n(\le 10^5)个点m(≤5×105)m(≤5×105)m(\le 5\times 10^5)条边的无向图,点和边都有权,q(≤5×105)q(≤5×105)q(\le 5\times 10^5)个询问,每次询问从一个点vvv能仅通过走边权不超过xxx的边走到的所有点中,第kkk大的点权。原版不强制在线,...原创 2018-06-08 13:08:17 · 301 阅读 · 0 评论 -
【ContestHunter0601】Genius ACM-贪心+倍增+归并排序
测试地址:Genius ACM做法: 本题需要用到贪心+倍增+归并排序。某机房大佬给的我他书上的一道神题…据说还是“基础算法”章节的例题…看来我NOIP退役已经是可以预见的了…首先可以大胆猜想(并小心证明)的是,计算校验值时所选的MMM对数,一定是最大的与最小的配对,次大的与次小的配对…以此类推。那么很明显的,一个区间如果被另一个区间包含,那么被包含的区间的校验值一定更小,这就是区间包含单调...原创 2018-10-01 11:41:17 · 550 阅读 · 0 评论 -
【BZOJ1414】对称的正方形(ZJOI2009)-Manacher+RMQ
测试地址:对称的正方形做法: 本题需要用到Manacher+RMQ。首先,我们想到枚举正方形的对称轴,求对称轴交点为某个点时的最大正方形大小。为了方便,我们模仿Manacher算法,把矩阵用000扩充成一个(2n+1)×(2m+1)(2n+1)\times (2m+1)(2n+1)×(2m+1)的矩阵,这样我们就只用考虑中心点是整数坐标的情况了。我们思考怎么判断一个中心点向外延伸kkk的长度...原创 2018-10-15 11:02:36 · 491 阅读 · 0 评论 -
【BZOJ2125】最短路-圆方树+倍增LCA
测试地址:最短路 做法:本题需要用到圆方树来处理仙人掌。 题目中所给的图称作仙人掌图,即每条边至多在一个环上的图。对于这种图,我们一般把它转化成树后,将树上的某些算法修改后来解决仙人掌上的问题。常用的一种转化方式就是圆方树。 在圆方树中,一个圆点表示原仙人掌中就有的点,而一个方点表示一个点双连通分量(环),并且一个方点和它表示的环中所有的点连边。那么我们怎么样构造出圆方树呢?在求点双连通分量...原创 2018-04-20 11:57:21 · 393 阅读 · 1 评论 -
【BZOJ4568】幸运数字(SCOI2016)-树上倍增+异或线性基合并
测试地址:幸运数字 做法:本题需要用到树上倍增+异或线性基合并。 我们发现,每次询问都是求从一条路径上选一个子集,使得这个子集的异或和最大。如果只有一个询问,那敢开这题的大家肯定都会O(60n)O(60n)O(60n)的线性基+贪心做法,问题是有qqq个询问,暴力做显然会炸,所以需要找到优化的方法。 我们发现只要求出了对应向量空间的线性基,那么求最大异或和就是O(60)O(60)O(60)的...原创 2018-03-22 22:18:30 · 369 阅读 · 0 评论 -
【Vijos-P1935】不可思议的清晨-树上倍增+LCA+分类讨论
【Vijos-P1935】不可思议的清晨-树上倍增+LCA+分类讨论原创 2016-11-08 21:20:28 · 462 阅读 · 0 评论 -
【NOIP2013提高组T3】货车运输-最大生成树+倍增LCA
【NOIP2013提高组T3】货车运输-最大生成树+倍增LCA原创 2016-08-03 10:38:17 · 395 阅读 · 0 评论 -
【NOIP2016提高组T2】天天爱跑步-倍增LCA+树上差分
【NOIP2016提高组T2】天天爱跑步-倍增LCA+树上差分原创 2017-03-21 13:43:35 · 2085 阅读 · 0 评论 -
【NOI2003T4】逃学的小孩-贪心+树形DP求直径+倍增LCA
【NOI2003T4】逃学的小孩-贪心+树形DP求直径+倍增LCA原创 2017-03-26 18:15:39 · 724 阅读 · 0 评论 -
【BJOI2010】次小生成树-最小生成树+倍增LCA
【BJOI2010】次小生成树-最小生成树+倍增LCA原创 2017-09-10 13:40:36 · 353 阅读 · 0 评论 -
【BZOJ2286】消耗战(SDOI2011)-虚树+树形DP
测试地址:消耗战 做法:本题需要用到虚树+树形DP。 这题如果只有一个询问,相信大家都会做了,比较裸的树形DP。但是询问次数很大,每次询问都O(n)O(n)O(n)DP的话,总的时间复杂度就是O(nm)O(nm)O(nm),无法承受。但是我们发现,总共涉及的询问点数不大,那么我们迫切需要一个关于kkk而不是关于nnn的算法。这时候就要拿出大杀器——虚树了。 虚树其实应该不算是一种数据结构,它...原创 2018-03-07 11:27:35 · 273 阅读 · 0 评论 -
【BZOJ3572】世界树(HNOI2014)-虚树+树形DP
测试地址:世界树 做法:本题需要用到虚树+树形DP。 首先一看这道题我们就知道要用虚树,因此我们先把询问点的虚树先建出来,然后考虑DP。 我们把虚树中每个点受哪个点管辖先求出来,这是通过两次DFS来完成的,一次处理向下方向的最近,一次处理向上方向的最近。然后对于每条虚树上的边,如果边的两端所属的点不同,则表示这条边需要切断,那么我们可以倍增求出断点,在每次切断时求出较下面的那一块的大小即可。...原创 2018-03-07 21:45:24 · 287 阅读 · 0 评论 -
【SPOJ10707】Count on a tree II-树上莫队算法
测试地址:Count on a tree II 题目大意:有一棵树,每个点有一个点权,多个询问,每次询问一条路径上有多少个不同的点权。 做法:本题需要用到树上莫队算法。 我们知道这题如果出在序列上就是莫队算法的裸题,而这题就是树上莫队算法的裸题。 我们知道要使用莫队算法,必须要将一条路径化为一个区间。从这个意义上来说,树上莫队算法的思想和树链剖分类似,都是将一棵树化为一个序列,但是树链剖分...原创 2018-02-24 10:54:59 · 331 阅读 · 0 评论 -
【BZOJ3991】寻宝游戏(SDOI2015)-贪心+DFS序+set
测试地址:寻宝游戏 做法:本题需要用到DFS+set。 首先需要看出,无论从哪个点出发结果都相同。然后就是要找一种能得到最优解的走法,显然走每条边222次是最优的,那怎么样构造出走法呢?其实只要按照这些点的DFS序顺序走下去,最后走回第一个点即可。因为对于涉及到的每条边,只下去一次再上来一次,所以这个肯定最优。那么我们每次插入或删除一个点时,实际上只影响到它在DFS序中相邻的两个点之间的贡献,...原创 2018-03-16 20:49:07 · 257 阅读 · 0 评论 -
【BZOJ4773】负环-倍增+Floyd
测试地址:负环做法: 本题需要用到倍增+Floyd。我们很快能想出O(n2m)O(n^2m)O(n2m)的算法:令f(i,j,k)f(i,j,k)f(i,j,k)为走iii条边,从jjj走到kkk的路径中最小的权值和。从小到大枚举iii转移即可。然而并过不了,而且我们发现,负环的长度似乎也不是单调的,即存在长为kkk的负环,不一定表示存在长为k+1k+1k+1的负环。实际上,我们只要给每个点...原创 2018-10-28 20:57:58 · 299 阅读 · 0 评论