
倍增
SC.ldxcaicai
我很菜=_=
展开
-
2018.07.25 bzoj2125: 最短路(圆方树+倍增)
传送门 人生的第一道仙人掌。 这道题求是仙人掌上的最短路。 先建出圆方树,然后用倍增跑最短路,当lcalcalca是圆点和方点时分类讨论答案即可。 代码如下:#include<bits/stdc++.h>#define N 20005using namespace std;inline int read(){ int ans=0; char ch=ge...原创 2018-07-25 21:44:45 · 191 阅读 · 0 评论 -
bzoj4568: [Scoi2016]幸运数字(倍增+线性基)
传送门题意:给你一棵带点权的树,多次询问路径的最大异或和。思路:线性基上树??倍增维护一下就完了。时间复杂度O(nlog3n)O(nlog^3n)O(nlog3n)代码:#include<bits/stdc++.h>#define ri register int#define fi first#define se secondusing namespace st...原创 2019-03-25 21:56:27 · 175 阅读 · 0 评论 -
bzoj4539: [Hnoi2016]树(主席树+倍增)
传送门题意:给一棵大树,令一棵模板树与这棵树相同,然后进行mmm次操作,每次选择模板树中的一个节点aaa和大树中一个节点bbb,把aaa这棵子树接在bbb上面,节点编号顺序跟aaa中的编号顺序相同。最后有qqq次询问问大树上两点距离。思路:真·树套树把每棵树所成一个点,然后相当于先把两个点跳到一个块中再求它们的lcalcalca,可以用主席树维护块中编号第kkk大来维护块中对应点,实现...原创 2019-03-25 18:27:44 · 221 阅读 · 0 评论 -
bzoj5308: [Zjoi2018]胖(二分答案+st表)
传送门想题5分钟调题两小时系列 其实还是我tcl读完题之后自然会知道一个关键点能够更新的点是一段连续的区间,于是我们对于每个点能到的左右区间二分答案,用ststst表维护一下查询即可。代码:#include<bits/stdc++.h>#define ri register intusing namespace std;inline int read(){ int an...原创 2019-03-04 14:01:00 · 224 阅读 · 0 评论 -
2018.11.08 NOIP模拟 班车(倍增+dfs+bit)
传送门对于每个点离线处理出向上走2i2^i2i班车到的最上面的点。然后每个询问(u,v)(u,v)(u,v)先把(u,v)(u,v)(u,v)倍增到刚好走不到lcalcalca的情况(有一个点如果就是lcalcalca直接特判)然后考虑最后把(u′,v′)(u&amp;#x27;,v&amp;#x27;)(u′,v′)连起来需要走一次还是两次。这个就是一个二维数点问题了。用dfsdfsd...原创 2018-11-08 23:37:05 · 254 阅读 · 0 评论 -
2018.11.08 NOIP模拟 景点(倍增+矩阵快速幂优化dp)
传送门显然只要所有点的权值加起来是0就一定有一组合法解。然后当成树随便构造就行了。至于非树边全部赋值为0就行。代码原创 2018-11-08 23:10:03 · 165 阅读 · 0 评论 -
2018.11.04 洛谷P1081 开车旅行(倍增)
传送门思路简单码量超凡?感觉看完题大家应该都知道是倍增sbsbsb题了吧。首先预处理出从每个点出发如果是AAA走到哪个点,如果是BBB走到哪个点。然后利用刚刚预处理出的信息再预处理从每个点出发AAA走2i2^i2i次的距离,BBB走2i2^i2i次的距离,A,BA,BA,B走2i2^i2i轮之后到了哪个点。剩下的询问就跑倍增就行了。代码:#include<bits/stdc++...原创 2018-11-04 17:21:34 · 153 阅读 · 0 评论 -
2018.11.09 bzoj4773: 负环(倍增+floyd)
传送门跟上一道题差不多。考虑如果环上点的个数跟最短路长度有单调性那么可以直接上倍增+floyd。然而并没有什么单调性。于是我们最开始给每个点初始化一个长度为0的自环,于是就有单调性了。代码:#pragma GCC optimize(2)#include<bits/stdc++.h>using namespace std;typedef long long ll;in...原创 2018-11-09 21:22:46 · 211 阅读 · 0 评论 -
2018.11.09 bzoj2165: 大楼(倍增+floyd)
传送门先倍增出iii使得2i2^i2i时间时刚好有每个点能够到mmm层及以上。然后就可以用floyd+floyd+floyd+倍增求出刚好不超过mmm层的时间,最后再补一层就行了。代码:#pragma GCC optimize(2)#include<bits/stdc++.h>using namespace std;typedef long long ll;inline...原创 2018-11-09 21:19:00 · 423 阅读 · 0 评论 -
2018.11.09 bzoj1706: relays 奶牛接力跑(倍增+floyd)
传送门倍增+floyd板子题。先列出状态fi,j,kf_{i,j,k}fi,j,k表示经过iii条边从jjj到kkk的最短路。然后发现可以用fi−1,j,kf_{i-1,j,k}fi−1,j,k和f1,j,kf_{1,j,k}f1,j,k来转移出fi,j,kf_{i,j,k}fi,j,k。由于floydfloydfloyd可以看做是矩阵乘法,因此可以用倍增/快速幂优化矩阵转移。代...原创 2018-11-09 21:15:36 · 256 阅读 · 0 评论 -
2018.11.01 NOIP训练 图论(线段树+倍增+dfs序)
传送门一道挺妙的题。对于询问点(u,v),如右图所示,我们可以发现存在一个点m在u->v的路径中,m子树的点到u是最近的,m子树外到v是最近的。其中dis(u,m)=(dis(u,v)-1)/2,且deep[u]>deep[v]根据这个结论,问题转换为m子树中找出距离u最大的点,在m子树外找出距离v的最大的点。子树的信息维护最大值自然可以想到dfs序+线段树。维护的算法步...原创 2018-11-01 18:18:02 · 229 阅读 · 0 评论 -
2018.10.31 NOIP模拟 一些情报(倍增)
传送门题目并不难(想)其实就是用倍增维护几个树上信息。也就这么几个:子树内最长链及其后继点。子树内次长链及其后继点。子树内第三场链(也就是dzyodzyodzyo口中鬼畜的次次长链)点iii的第2j2^j2j个父亲不计算iii这棵子树的最优值−dep-dep−dep点iii的第2j2^j2j个父亲不计算iii这棵子树的最优值+dep+dep+dep点iii的第2j2^j2j个祖...原创 2018-10-31 19:27:18 · 157 阅读 · 0 评论 -
2018.09.30 bzoj3551:Peaks加强版(dfs序+主席树+倍增+kruskal重构树)
传送门一道考察比较全面的题。这道题又用到了熟悉的kruskal+倍增来查找询问区间的方法。查到询问的子树之后就可以用dfs序+主席树统计答案了。代码:#include&amp;lt;bits/stdc++.h&amp;gt;#define N 200005#define M 500005using namespace std;inline int read(){ int ans=0; ch...原创 2018-09-30 14:40:04 · 216 阅读 · 0 评论 -
2018.10.12 NOIP训练 01 串(倍增+hash)
传送门一道挺不错的倍增。其实就是处理出每个数连向的下一个数。由于每个点只会出去一条边,所以倍增就可以了。开始和zxyzxyzxy口胡了一波O(n+m)O(n+m)O(n+m)假算法,后来发现如果是mmm个自环就咕咕了。哎还是太年轻了啊。另外把ststst打成了hashhashhash以及没开longlonglong longlonglong都能过样例真是神奇。代码...原创 2018-10-12 23:44:40 · 253 阅读 · 0 评论 -
bzoj4444: [Scoi2015]国旗计划(线段树+倍增)
传送门题意简述:现在给你一个长度为mmm的环,有nnn条互不包含的线段,问如果强制选第iii条线段至少需要用几条线段覆盖这个环,注意用来的覆盖的线段应该相交,即[1,3],[4,5][1,3],[4,5][1,3],[4,5]不合法[1,4],[4,5][1,4],[4,5][1,4],[4,5]合法。思路:把坐标先离散化,然后破环为链,接着用线段树维护每个点向左走一步最多走到哪个点,然后就...原创 2019-03-26 14:17:14 · 147 阅读 · 0 评论