摘要: 前言 ​ “倍增”,作为一种二进制拆分思想,广泛用于各中算法,如$ST$表,求解$LCA$等等...今天,我们仅讨论用该思想来求解树上两个节点的$LCA$(最近公共祖先) “倍增”是什么东西? ​ 倍增就是“成倍增加”的意思,比如$1$倍增后变成了$2$,$2$倍增后就变成了$4$,$4$变成$8$ 阅读全文
posted @ 2018-10-15 21:26 water_mi 阅读(1677) 评论(2) 推荐(0) 编辑
摘要: 1.1 前言 ​ 多重背包,想必看到这篇博文的人应该都知道了,这里仅仅列出伪代码($n$为物品个数,$m$为背包容积) ​ 显然,这种算法的复杂度是很不可取的,于是我们来考虑优化 1.2 优化方式 ​ 设$c,v,w$分别为当前物品的个数,体积,价值,根据原始转移方程可知,$f_i$一定是由$f_{ 阅读全文
posted @ 2018-10-15 20:55 water_mi 阅读(383) 评论(0) 推荐(0) 编辑
摘要: 前言 $Master$定理,又称主定理,用于程序的时间复杂度计算,核心思想是分治,近几年$Noip$常考时间复杂度的题目,都需要主定理进行运算。 前置 我们常见的程序时间复杂度有: $O(n)/O(n^2)/O(nlog_2n)/O(2^n)$等等... 我们叫它程序的渐进时间复杂度,例如一段程序执 阅读全文
posted @ 2018-10-15 20:51 water_mi 阅读(7539) 评论(2) 推荐(1) 编辑
摘要: ​ 这是一道$Kruskal$重构树的板子题,因为$Kruskal$重构树满足两节点的在原树上路径上边最大/小值为这两个点在重构树上的$LCA$的点权 cpp include include using std::swap; using std::sort; typedef long long ll 阅读全文
posted @ 2018-10-15 20:21 water_mi 阅读(159) 评论(0) 推荐(0) 编辑