算法笔记

【算法笔记】最近公共祖先(LCA)问题求解——倍增算法

2023-01-06
0. 前言 最近公共祖先简称 LCA(Lowest Common Ancestor)。两个节点的最近公共祖先,就是这两个点的公共祖先里面,离根最远的那个。 这种算法应用很广泛,可以很容易解决树上最短路等问题。 为了方便,我们记某点集 S={...
阅读更多

【算法笔记】【专题】RMQ 问题:ST表/树状数组/线段树

2023-01-05
0. 前言 好久没更算法笔记专栏了,正好学了新算法来更新…… 这也是本专栏的第一个专题问题,涉及到三种数据结构,如果写得有问题请各位大佬多多指教,谢谢! 1. 关于 RMQ 问题 RMQ 的全称是 Range Minimum/Maximum...
阅读更多

【算法笔记】位运算详解

2022-10-18
0. 前言 突然想到位运算是个好东西,就来水一波文章了…… 注意:我把能想到的有关位运算的所有内容都放进来了,所以篇幅较长,请谅解!若有写的不清楚或者不够详细的地方欢迎在评论区补充,谢谢支持! 本文中参考代码均使用C++编写。 废话不多说,...
阅读更多

【算法笔记】树状数组/Binary Indexed Tree/Fenwick Tree

2022-08-20
前言 树状数组,即树形存储的数组,又称Binary Indexed Tree或Fenwick Tree。 抛开它树形的存储结构,这种神奇的数据结构的应用看起来与「 树」没什么关系: 有一个序列A=(A1,A2,…,AN)A=(A_1,A_...
阅读更多

【算法笔记】三种背包问题——背包 DP

2022-08-18
前言 背包(Knapsack)问题是经典的动态规划问题,也很有实际价值。 01背包 洛谷 P2871 [USACO07DEC] Charm Bracelet S AtCoder Educational DP Contest D - Kna...
阅读更多

【算法笔记】Kruskal/Prim算法——求解最小生成树问题

2022-08-15
前言 生活中经常遇到类似这种的问题: 公路修建 有一些城市,城市之间要修建高速公路,每两个城市之间都可以修双向的路。其中每两个城市之间修路都需要花费对应的金额。请问如何修路,使得总花费的金额最少,且任意两个城市之间都可以直接或间接通过修建...
阅读更多

【算法笔记】单源最短路问题——Dijkstra算法(无优化/优先队列/set优化)

2022-08-13
0. 前言 Dijkstra算法可在O(mlog⁡m)\mathcal O(m\log m)O(mlogm)或O(mlog⁡n)\mathcal O(m\log n)O(mlogn)的时间内求解无负权单源最短路问题。本文中,我们将详细介绍算...
阅读更多

【算法笔记】多源最短路问题——Floyd算法

2022-08-12
0. 前言 在图中,如果要求任意两点间的距离,则可以使用Floyd(O(N3)\mathcal O(N^3)O(N3)😉)和Dijkstra(O(NMlog⁡M)\mathcal O(NM\log M)O(NMlogM)😃)。对于比较小...
阅读更多

【算法笔记】树形DP算法总结&详解

2022-08-12
0. 定义 树形DP,又称树状DP,即在树上进行的DP,是DP(动态规划)算法中较为复杂的一种。 1. 基础 令f[u]= f[u]=~f[u]= 与树上顶点uuu有关的某些数据,并按照拓扑序(从叶子节点向上到根节点的顺序)进行DP\tex...
阅读更多