- 博客(10)
- 收藏
- 关注
原创 点双连通分量
摘要 点双连通分量是无割点的极大连通块。割点至少属于两个分量,如示例图中点6将图分成两个分量。求解时利用两个性质:1)不同分量最多共享一个割点;2)DFS树中dfn最小的节点必为割点或根节点。根节点需根据子树数量判断是否为割点或分量根。代码实现参考OI-Wiki。
2025-08-29 00:15:00
312
原创 边双连通分量
本文介绍了边双连通分量的概念及其求解方法。边双连通分量是指不含割边的极大连通子图,其特点是任意两点间存在两条边不重复路径,且具有传递性。文中通过图示展示了两个不同的边双连通分量。求解方法基于割边,先找出所有割边,再通过DFS确定各边双连通分量。具体实现代码可参考OI-Wiki。(99字)
2025-08-28 15:33:47
330
原创 Tarjan 求割边
本文介绍了割边(桥)的定义及求解方法。割边是指删除后会增加连通分量数的边。文章通过Tarjan算法实现割边检测,关键条件为low[v]>dfn[u]。代码部分展示了如何标记割边并输出结果,特别处理了特殊测试用例。算法时间复杂度与Tarjan算法相同,适用于无向图割边求解。
2025-08-28 14:54:00
940
原创 Tarjan求割点
本文介绍了无向图中割点的定义和两种求解方法。第一种是暴力枚举每个节点删除后判断连通性变化,时间复杂度为O(n×(n+m))。第二种采用改进的Tarjan算法,通过DFS生成树和low数组高效判断割点,时间复杂度更优。文章给出了洛谷P3388题的C++实现代码,展示了如何利用Tarjan算法求解割点并输出结果。该算法特别处理了根节点情况,适用于大规模图论问题。
2025-08-27 17:03:03
1082
原创 有向图的强连通性
本文介绍了有向图的强连通性概念及求解强连通分量的两种算法。首先定义了强连通图和强连通分量(SCC),即图中任意两点相互可达的最大子图。重点讲解了Tarjan算法,该算法基于DFS生成树,通过维护dfn和low数组来识别SCC。核心思想是当某个节点的dfn等于low值时,形成一个SCC。文章提供了完整的C++代码实现,展示了如何计算图中的SCC数量。该算法时间复杂度为O(V+E),是求解强连通分量的高效方法。
2025-08-25 10:34:58
1010
原创 二项式反演四种形式及其中一种的证明
二项式反演是一种通过构造简单函数g(i)求解复杂函数f(n)的方法,包含四种主要形式。其中形式二和形式四最为常用。证明过程基于二项式系数恒等式,通过交换求和顺序和代数变换实现。特别提醒,不建议用容斥原理解释这些公式。文章详细展示了形式二的证明过程,其他形式可类似推导。该工具在组合数学中具有重要应用价值。
2025-08-17 11:39:45
834
1
原创 整体二分题解
整体二分(Parallel Binary Search)是一种用于解决多组查询问题的有效算法,特别适用于每组查询的答案都可以通过二分查找来确定的情况。
2025-08-15 09:19:59
536
原创 Grid Rotations
该题考察矩阵旋转操作,通过Q次将矩阵按给定行列分割并旋转四个部分。解题关键在于发现行列操作可分离处理,使用两棵平衡树分别记录行列翻转情况。最终统一处理所有操作,避免每次直接旋转矩阵。这种方法将时间复杂度优化至可接受范围,适用于大规模数据。
2025-08-11 19:56:39
243
原创 FHQ-Treap
本文介绍了FHQ-Treap这一基于分裂和合并操作的平衡树数据结构。文章首先阐述了其基本概念,指出其相比旋转式平衡树的优势在于代码简洁、易于理解。接着讲解了二叉搜索树和堆这两个前置知识,重点说明了FHQ-Treap的核心操作:按值分裂和合并两棵树的实现方法。随后详细介绍了插入和删除操作的具体实现过程,给出了相关代码示例。最后简要提及了查询前驱后继、排名等操作的实现思路。全文通过形象的比喻和代码示例,帮助读者理解这一数据结构的实现原理。
2025-08-11 08:00:35
896
1
原创 Manacher马拉车
Manacher算法是一种线性时间复杂度的算法,用于高效查找字符串中的最长回文子串。其核心思想是利用回文串的对称性避免重复计算,通过维护"最右回文边界"和中心点来扩展回文半径。算法首先对字符串进行预处理(插入特殊字符处理偶长回文),然后分四种情况处理回文半径,最后映射得到原串中的回文长度。由于关键变量r始终向右移动,算法整体时间复杂度为O(n)。该算法在字符串处理中具有重要应用价值。
2025-08-10 21:28:02
460
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅