自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(9)
  • 收藏
  • 关注

原创 【排序 贪心】社团招新 CSP-S2025

排序、贪心算法

2025-11-15 18:10:56 924

原创 图论 最短路(3)建图技巧

本文介绍了两种重要的图论建图技巧:差分约束系统和分层图。差分约束系统通过将不等式转化为有向边来建立图模型,用于求解N元一次不等式组,若图中存在负环则无解。分层图则将动态规划思想引入图论,通过状态分层来解决问题,如例题"飞行路线"通过建立k+1层图来模拟免费乘坐次数的状态转移。文章通过具体例题展示了两种技巧的应用,包括洛谷P1993、P2294和P4568,并提供了相应的C++实现代码。这些技巧能够有效解决特定类型的最短路径问题。

2025-07-18 14:29:24 868

原创 图论 最短路(2)多源最短路

Floyd算法是一种经典的多源最短路算法,通过动态规划思想求解图中任意两点间的最短路径,时间复杂度为O(n³)。该算法使用邻接矩阵存储图结构,通过三重循环实现状态转移。文章详细介绍了Floyd算法的原理、实现模板及其应用场景,包括负权环检测、最小环求解和传递闭包问题。此外,还介绍了Johnson算法作为处理负权图的替代方案,通过建立超级源点和重赋权值将负权图转化为正权图,再利用Dijkstra算法求解。两种算法各有适用场景,Floyd适合稠密图,Johnson则更适合处理含负权的稀疏图。

2025-07-17 16:23:43 1454

原创 图论 欧拉图

本文介绍了欧拉图的基本概念和算法。欧拉回路指通过图中每条边恰好一次的回路,而欧拉通路是通过每条边恰好一次的通路。无向图是欧拉图当且仅当非零度顶点连通且所有顶点度数为偶数;有向图则需满足强连通且入度等于出度。文章还介绍了半欧拉图的判定条件,并详细讲解了Hierholzer算法求解欧拉回路的原理和实现步骤,包括DFS遍历和边处理过程。最后通过"骑马修栅栏"和"项链复原"两个例题展示了算法应用,重点强调了需要先判断图是否满足欧拉图条件再实施算法。

2025-07-17 13:35:08 1393

原创 图论 最短路(1) 单源最短路

摘要:本文介绍了单源最短路问题(SSSP)及其两种主要算法。首先阐述了松弛操作的核心思想,即通过不断更新节点最短距离来求解最短路。然后详细讲解了Bellman-Ford算法,该算法通过n-1轮边松弛操作求解最短路,时间复杂度O(nm),并能检测负权环。接着讲解了Dijkstra算法,它采用贪心策略,每次选择距离最小的节点进行松弛,适用于无负权边的图,使用优先队列优化后时间复杂度为O(mlogm)。文章包含算法原理、实现代码和示例说明。

2025-07-16 22:04:48 1202

原创 图论 最小生成树 MST问题

本文介绍了最小生成树的概念及其两种主要算法。最小生成树是指包含图中所有顶点且边权和最小的子图。文章首先阐述了最小生成树的性质定理,证明最小生成树必然包含原图权值最小的边。然后详细讲解了Kruskal算法(基于贪心思想和并查集实现)和Prim算法(基于维护点集实现)的原理及实现过程,包括Prim算法的二叉堆优化版本。最后比较了两种算法的适用场景:Kruskal适用于稀疏图,Prim更适合稠密图。文章提供了清晰的算法描述和代码示例,帮助读者理解最小生成树问题的解决方法。

2025-07-14 20:33:00 1216

原创 进阶数据结构 并查集

摘要:并查集是一种高效管理元素集合的数据结构,支持查询与合并操作。其核心思想是将元素组织为森林结构,通过路径压缩和启发式合并优化,使时间复杂度接近常数。存储方式是用数组fa[x]记录每个元素的父节点。路径压缩优化在查询时将节点直接指向根节点,而启发式合并则优先合并较小集合。进一步扩展包括边带权并查集(维护节点到根的权值)和扩展域并查集(处理多类关系)。应用。

2025-07-13 12:40:39 1210

原创 进阶数据结构 树状数组

树状数组是一种高效的数据结构,基于二进制分解思想,通过lowbit运算实现O(logN)的区间查询和单点修改。相比线段树,它代码更简洁、常数更小,适合处理单点修改需求高的场景。树状数组利用正整数二进制分解的唯一性,将区间划分为多个小区间进行维护,要求维护的信息具有结合律和可差分性。基本操作包括区间查询和单点修改,通过权值树状数组等变形可解决逆序对等问题。其核心在于利用lowbit划分区间,构建树形结构,使深度保持在O(logN)级别。

2025-07-11 23:21:02 491

原创 二分算法原理及实现 详解

二分查找(Upper)代码在数组aaa中查找≤x\le x≤x的数中的最后一个(即xxx或xxx的前驱)。对比数据示例:输出333int main()return 0;upper_bound() STL函数该函数查找第一个x> xx的数,其他用法与一样。注意,该函数与上述代码并不等价。对比数据示例:输出444int main()return 0;

2025-07-09 21:09:49 1201

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除