合集-算法笔记
摘要:0. 定义 树形DP,又称树状DP,即在树上进行的DP,是DP(动态规划)算法中较为复杂的一种。 1. 基础 令\(f[u]=~\)与树上顶点\(u\)有关的某些数据,并按照拓扑序(从叶子节点向上到根节点的顺序)进行\(\text{DP}\),确保在更新一个顶点时其子节点的dp值已经被更新好,以更新
阅读全文
摘要:0. 前言 在图中,如果要求任意两点间的距离,则可以使用Floyd(\(\mathcal O(N^3)\)😉)和Dijkstra(\(\mathcal O(NM\log M)\)😃)。对于比较小的数据范围(一般为顶点数\(N\le 150\)),可以使用Floyd算法。本文将讲述Floyd算法的
阅读全文
摘要:0. 前言 Dijkstra算法可在\(\mathcal O(m\log m)\)或\(\mathcal O(m\log n)\)的时间内求解无负权单源最短路问题。本文中,我们将详细介绍算法的原理、实现,以及常用的两种优化。 另外,Dijkstra算法也不要乱用,比如说多源的最短路,用Dijkstr
阅读全文
摘要:前言 生活中经常遇到类似这种的问题: 公路修建 有一些城市,城市之间要修建高速公路,每两个城市之间都可以修双向的路。其中每两个城市之间修路都需要花费对应的金额。请问如何修路,使得总花费的金额最少,且任意两个城市之间都可以直接或间接通过修建的路来通行? 实际上,我们可以把这种问题抽象化,把城市看作图的
阅读全文
摘要:前言 背包(Knapsack)问题是经典的动态规划问题,也很有实际价值。 01背包 洛谷 P2871 [USACO07DEC] Charm Bracelet S AtCoder Educational DP Contest D - Knapsack 1 有\(n\)个物品和一个总容量为\(W\)的背
阅读全文
摘要:前言 树状数组,即树形存储的数组,又称Binary Indexed Tree或Fenwick Tree。 抛开它树形的存储结构,这种神奇的数据结构的应用看起来与「 树」没什么关系: 有一个序列\(A=(A_1,A_2,\dots,A_N)\),在不超过\(\mathcal O(\log N)\)的时
阅读全文
摘要:0. 前言 突然想到位运算是个好东西,就来水一波文章了…… 注意:我把能想到的有关位运算的所有内容都放进来了,所以篇幅较长,请谅解!若有写的不清楚或者不够详细的地方欢迎在评论区补充,谢谢支持! 本文中参考代码均使用C++编写。 废话不多说,下面步入正题。 1. 基本运算 有一定基础的可以跳过该部分。
阅读全文
摘要:0. 前言 好久没更算法笔记专栏了,正好学了新算法来更新…… 这也是本专栏的第一个专题问题,涉及到三种数据结构,如果写得有问题请各位大佬多多指教,谢谢! 1. 关于 RMQ 问题 RMQ 的全称是 Range Minimum/Maximum Query,即区间最大/最小值问题。 本文中,我们的算法以
阅读全文
摘要:0. 前言 最近公共祖先简称 LCA(Lowest Common Ancestor)。两个节点的最近公共祖先,就是这两个点的公共祖先里面,离根最远的那个。 这种算法应用很广泛,可以很容易解决树上最短路等问题。 为了方便,我们记某点集 \(S=\{v_1,v_2,\ldots,v_n\}\) 的最近公
阅读全文

浙公网安备 33010602011771号