普通莫队 莫队算法简介莫队算法是由莫涛提出的算法。在莫涛提出莫队算法之前,莫队算法已经在 Codeforces 的高手圈里小范围流传,但是莫涛是第一个对莫队算法进行详细归纳总结的人。莫涛提出莫队算法时,只分析了普通莫队算法,但是经过 OIer 和 ACMer 的集体智慧改造,莫队有了多种扩展版本。 莫队算法可以解决一类离线区间询问问题,基于双指针,分块,排序等思想,适用性极为广泛。同时将其加以扩展,便能轻松 2024-01-20 算法 #algorithm #杂项
Floyd算法 Floyd-Warshall概念Floyd-Warshall算法是一种经典的图算法,用于求解图中所有顶点对之间的最短路径(多源最短路)。该算法适用于有向图或无向图,可以处理带有负权边(但不能存在负权回路)的图。Floyd-Warshall算法的主要思想是动态规划,通过逐步更新所有顶点对之间的最短路径信息来求解问题。 算法步骤:初始化:将图的邻接矩阵表示的路径权值矩阵初始化为图中的边权值。如果不存在 2024-01-18 算法 > 图论 #algorithm #图论基础 #最短路
SPFA算法 前言SPFA算法是Bellman_ford算法的优化,所以我们先了解一下Bellman_ford算法。 Bellman_ford算法Bellman-Ford算法是一种用于求解单源最短路径问题的经典算法,其目标是找出从单个源点出发到图中所有其他顶点的最短路径。该算法适用于带有负权边的图。 思想Bellman-Ford算法采用一种松弛(relaxation)的策略来逐步逼近最短路径。其基本思想可以概括 2024-01-18 算法 > 图论 #algorithm #图论基础 #最短路
Dijkstra算法 概念Dijkstra算法是一种解决单源最短路径问题的贪心算法。 朴素版Dijkstra算法思想:朴素版Dijkstra算法是一种贪心算法,通过维护每个节点的当前最短距离来逐步确定从起始节点到其他节点的最短路径。在每一步中,选择当前未被标记的节点中距离最短的节点进行标记,并更新其邻居节点的距离值。 概念: 距离值(distance): 表示从起始节点到某个节点的当前已知最短路径长度。 标记集合(v 2024-01-18 算法 > 图论 #algorithm #图论基础 #最短路
Kruskal算法 Kruskal 算法Kruskal 算法是一种用于求解最小生成树的贪心算法。它的基本思想是通过选择边来逐步构建最小生成树,确保每一步都选择权值最小的边,同时避免形成环。 算法引入假设你是一位城市道路规划者,下面是你的城市以及蓝图。现在要求你建设其中的一些道路(每一条道路的建设需要金币),使每个城市之间都能互相到达,并且所花费的金币最少。而你是算法高手,一下就想到了树这个数据结构,树是特殊的图,有向 2024-01-16 算法 > 图论 #algorithm #最小生成树 #kruskal
元组tuple C++ Tuple 元组详解C++ 标准库中的元组(Tuple)是一种特殊的数据结构,可以容纳多个不同类型的元素。它提供了一种方便的方式来组织和处理多个值,类似于结构体,但更加灵活。 基本概念创建元组在 C++ 中,你可以使用 std::tuple 来创建元组。以下是一个简单的例子: 1234567891011121314#include <tuple>#include <ios 2024-01-16 C++ #tuple
拓展域并查集 拓展并查集的概念拓展并查集(Union-Find with Extensions)是对标准并查集(Union-Find)的一种扩展,旨在解决更复杂的问题。 拓展域并查集解决了一种多个有相互关系的并查集,放在一起考虑的问题。一般的并查集应用一般就是判断在不在一个集合,拓展域并查集讲的是多个集合,之间有相互关系一般为相互排斥关系,判断是否在一个集合等。 核心思想为了解决多种关系相互的问题,我们需要更多 2024-01-15 算法 #algorithm #并查集 #图论 #数据结构
图论基础 图的概念图论是离散数学的一个分支,致力于研究图(Graph)这一数学结构。图是用来模拟对象之间成对关系的工具,由节点或顶点(Vertex)以及连接这些顶点的边(Edge)组成。 下面这张图片就是一个图$G(V,E)$图可以被表示为 $G=(V, E),其中 V=(v_1, … , v_N),E= (e_1, … , e_M)$。 其中$V$代表点集,$E$为边集。需要注意的是,图的顶点集合不能为空 2024-01-15 算法 > 图论 #algorithm #图论基础
带权并查集 概念带权并查集(Weighted Union-Find)是并查集的一种扩展,它在标准的并查集操作基础上引入了一个权重或者秩的概念,使得每个节点不仅代表一个集合,还记录了该集合的一些额外信息。通常,这个额外信息是与集合中的元素相关联的权重或者秩。 维护距离很多带权并查集的题目都是通过维护距离这个额外的元素来求解。现在设 $d[i]$ 数组为第 $i$ 个点到他父节点的距离,一开始,每个点自己就是自己 2024-01-13 算法 #algorithm #并查集 #图论 #数据结构
并查集 并查集的概念并查集是一种用于处理集合合并与查找问题的数据结构。它提供查找(Find)和合并(Merge)两个基本操作。通过维护树形结构,每个树代表一个集合,通过路径压缩和按秩合并等优化,提高查找和合并操作的效率。常用于解决图论、连通性和最小生成树等问题。 简单来说,并查集就是一种能够处理连通性问题的数据结构。 并查集的引入假如现在世界上有很多个人,现在设定一个规矩,两个人可以通过比试的输赢来建立一 2024-01-12 算法 #algorithm #并查集 #图论 #数据结构
二分法 二分法的概念二分法(Bisection method),即一分为二的的方法。对于在区间$[a,b]$上连续不断且满足$f(a)*f(b)<0$的函数$y=f(x)$,通过不断地把函数$f(x)$的零点所在区间二等分,使区间两个端点逐步逼近零点,进而得到零点的近似值的方法。简单来说就是一般用于求解一个具有单调性的函数的分界点。 二分实际上也是一种枚举,只不过是使用的数学方法大大减少了无意义的枚 2024-01-10 算法 #algorithm #二分
前缀和与差分 前缀和前缀和是指某序列的前n项和,可以把它理解为数学上的数列的前n项和。 假定$a_1,a_2,a_3,a_4…..a_n$为我们的原数组。给定m个$l,r$,要求求出$l$到$r$的区间和。 直接枚举一遍$l,r$进行求解的时间复杂度是$O(n*m)$,对于时间复杂度较严格的题,这样的做法是不可取的。 现在,假定有一个数组$p_1,p_2,p_3…p_n$,其中: $p_1 = a_1$ $p 2024-01-10 算法 #algorithm #前缀和 #差分