随笔分类 -  倍增

摘要:[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=5415 [算法] 对于v到1的1条合法路径 , 我们将其分为两段考虑 1. v -> u , 该路径上的最短边长大于等于P 2. u -> 1 显然 , 我们要求所有这样的路径中dist 阅读全文
posted @ 2019-02-13 22:47 evenbao 阅读(293) 评论(0) 推荐(0)
摘要:Problem A. Two distinct points [题解] 显然 , 当l1不等于r2时 , (l1 , r2)是一组解 否则 , (l1 , l2)是一组合法的解 时间复杂度 : O(1) [代码] Problem B. Divisors of Two Integers [题解] 首先 阅读全文
posted @ 2019-01-24 20:55 evenbao 阅读(198) 评论(0) 推荐(0)
摘要:[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=3083 [算法] 树链剖分 时间复杂度 : O(NlogN ^ 2) [代码] 阅读全文
posted @ 2018-12-02 22:22 evenbao 阅读(174) 评论(0) 推荐(0)
摘要:[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=3306 [算法] 若没有换根操作 , 那么“查询子树最小值”就可以用DFS序 + 线段树解决 进一步地 , 可以发现换根后 , 造成影响的点在原根到新根的路径上 , 根据这个性质 , 问 阅读全文
posted @ 2018-12-02 18:01 evenbao 阅读(223) 评论(0) 推荐(1)
摘要:[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=2588 [算法] 如果我们能知道“u到v这条路径上权值<= k的数的个数” , 那么就可以通过二分的方式求出答案 进一步地 , u到v路径上权值<= k的数的个数 = u到根节点路径上权 阅读全文
posted @ 2018-11-30 22:00 evenbao 阅读(187) 评论(0) 推荐(0)
摘要:[题目链接] https://codeforces.com/contest/1051/problem/F [算法] 注意边数 - 点数 <= 20 , 我们不妨首先求出图的任意一棵生成树 , 不在生成树内的边最多有21条 , 这些边不同的端点最多有42个 对这些点分别运行Dijkstra最短路 回答 阅读全文
posted @ 2018-10-01 10:34 evenbao 阅读(163) 评论(0) 推荐(0)
摘要:[题目链接] https://loj.ac/problem/539 [算法] 首先 , 我们用f[u][k]表示现在在景点u ,还有k元钱 , 最多能够走多少路 不难发现f[u][k] = max{ f[v][k - P[u]] + Dist(u,v,min(C,ci)) } ( dist(u,v, 阅读全文
posted @ 2018-09-08 09:31 evenbao 阅读(223) 评论(0) 推荐(0)
摘要:[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=4326 [算法] 首先,此题的答案是具有单调性的,因此可以二分答案mid 检验答案时,我们判断每条路径的长度是否大于mid,若大于mid,则说明至少要将这条路径上的一条边变为“虫洞” 因 阅读全文
posted @ 2018-08-13 22:54 evenbao 阅读(156) 评论(0) 推荐(0)
摘要:[题目链接] https://www.luogu.org/problemnew/show/P1967 [算法] 可以证明答案一定为最大生成树上两点路径中的最小值 树上倍增即可 时间复杂度 : O((N + Q) log N)[代码] 阅读全文
posted @ 2018-08-12 17:34 evenbao 阅读(111) 评论(0) 推荐(0)
摘要:[题目链接] https://www.luogu.org/problemnew/show/P1084 [算法] 细心观察发现 : 此题的答案具有单调性,也就是说,如果p小时能控制疫情,那么q小时也能控制疫情(q > p),因此我们可以二分答案,这是此题的突破口 问题就转化为了检验”Mid小时是否可以 阅读全文
posted @ 2018-07-29 18:36 evenbao 阅读(1251) 评论(0) 推荐(0)
摘要:[题目链接] https://www.luogu.org/problemnew/show/P1081 [算法] STL-set + 倍增 + DP [代码] 阅读全文
posted @ 2018-07-19 15:40 evenbao 阅读(196) 评论(0) 推荐(0)
摘要:【题目链接】 https://www.lydsy.com/JudgeOnline/problem.php?id=1602 【算法】 倍增求LCA 【代码】 阅读全文
posted @ 2018-07-01 14:26 evenbao 阅读(152) 评论(0) 推荐(0)
摘要:【题目链接】 点击打开链接 【算法】 首先,有一个结论 : 一定有一棵严格次小生成树是在最小生成树的基础上去掉一条边,再加上一条边 这个结论的正确性是显然的 我们先用kruskal算法求出最小生成树,然后,枚举不在最小生成树上的边,我们发现若加上这条边, 则形成了一个环,用最小生成树的权值和加上这条 阅读全文
posted @ 2018-06-06 21:27 evenbao 阅读(88) 评论(0) 推荐(0)
摘要:【题目链接】 点击打开链接 【算法】 树上倍增,时间复杂度 : O(qklog(n)) 【代码】 阅读全文
posted @ 2018-06-05 19:10 evenbao 阅读(131) 评论(0) 推荐(0)
摘要:【题目链接】 点击打开链接 【算法】 求出这个图的最小生成树,对于每次询问,用倍增法求出最近公共祖先,查询最小生成树上两点路径上的最大值 算法的正确性? 假设x和y在最小生成树中路径上的最长边为p,那么,根据kruskal算法的执行过程,我们发现p合并 了x和y所在的集合 假设有一条边q,满足q < 阅读全文
posted @ 2018-06-04 22:28 evenbao 阅读(116) 评论(0) 推荐(0)
摘要:【题目链接】 点击打开链接 【算法】 预处理i^k的前缀和,对于每次询问,树上倍增即可 时间复杂度 : O(nk + mlog(n)) 【代码】 阅读全文
posted @ 2018-06-04 22:19 evenbao 阅读(174) 评论(0) 推荐(0)
摘要:【题目链接】 点击打开链接 【算法】 倍增法求最近公共祖先 【代码】 阅读全文
posted @ 2018-05-26 11:25 evenbao 阅读(112) 评论(0) 推荐(0)
摘要:【题目链接】 点击打开链接 【算法】 这是一道经典的最值查询(RMQ)问题。 我们首先想到线段树。但有没有更快的方法呢?对于这类问题,我们可以用ST表(稀疏表)算法求解。 稀疏表算法。其实也是一种动态规划的算法。是先做一遍预处理,然后O(1)求出答案。 设计状态 : f[i][j] 表示从第i个数开 阅读全文
posted @ 2018-02-14 15:54 evenbao 阅读(129) 评论(0) 推荐(0)
摘要:【题目链接】 点击打开链接 【算法】 LCA + 树上差分 【代码】 阅读全文
posted @ 2018-02-14 15:00 evenbao 阅读(174) 评论(0) 推荐(0)