ACM算法集:最小生成树与Prim算法详解

需积分: 0 1 下载量 77 浏览量 更新于2024-07-28 1 收藏 292KB DOC 举报
"ACM经典算法集锦"是一份涵盖了在算法竞赛中常见的ACM算法精选文档,着重于解决实际问题中的最小生成树和最短路径问题。该文档提供了一些示例代码,展示了如何使用C++实现Prim算法和Kruskal算法来求解这些问题。 首先,我们来看看Kruskal最小生成树算法。Kruskal算法的核心是贪心策略,通过合并边来构建一棵树,直到树的边集包含所有顶点。在这个C++实现中: 1. 定义了一个`edg`结构体,包含了边的起点`u`、终点`v`和权重`w`。 2. `operator<`函数用于比较边的权重,决定边的顺序。 3. `uni`函数实现了并查集数据结构,用于查找两个顶点是否属于同一个集合。如果它们属于不同的集合,将较小集合合并到较大集合中。 4. `main`函数中,首先读入测试用例数量`t`,然后输入图的节点数量`n`和边的信息。所有边按照权重排序后,使用`uni`函数依次合并边,每次找到一条形成新最小生成树的新边,直到形成一棵包含所有顶点的树。 5. 最后输出生成树中最大的边(即最小权重)的权重。 接着是Prim算法,也用于求解最小生成树,但它的策略是每次从已选择的顶点中选择一个未被连接的顶点,与当前最小生成树中最远的顶点相连。这里没有给出完整的Prim算法实现,但可以推测实现中会有以下部分: 1. 初始化一个集合`set`表示已选择的顶点,以及一个邻接矩阵`g`存储边的信息。 2. 一个循环中,遍历未选择的顶点,计算与已选择顶点间的最小边,将这条边的另一端加入集合`set`,并更新邻接矩阵。 3. 当所有顶点都被选择或者没有新的边可以添加时,最小生成树构建完成,输出树的总权重。 这些算法在ACM竞赛中经常被用来处理图论问题,如寻找网络中连接所有节点的最低成本路径或构建最小代价的连通结构。理解并熟练掌握这两种算法对于提高在ACM这类编程竞赛中的竞争力至关重要。同时,熟悉并能够优化这类基础算法也是提升算法设计和分析能力的关键步骤。
2010-02-06 上传
一.数论 4 1.阶乘最后非零位 4 2. 模线性方程(组) 4 3. 素数表 6 4. 素数随机判定(miller_rabin) 6 5. 质因数分解 7 6. 最大公约数欧拉函数 8 二.图论_匹配 9 1. 二分图最大匹配(hungary邻接表形式) 9 2. 二分图最大匹配(hungary邻接表形式,邻接阵接口) 10 3. 二分图最大匹配(hungary邻接阵形式) 10 4. 二分图最大匹配(hungary正向表形式) 11 5. 二分图最佳匹配(kuhn_munkras邻接阵形式) 11 6. 一般图匹配(邻接表形式) 12 7. 一般图匹配(邻接表形式,邻接阵接口) 13 8. 一般图匹配(邻接阵形式) 14 9. 一般图匹配(正向表形式) 15 三.图论_生成树 16 1. 最小生成树(kruskal邻接表形式) 16 2. 最小生成树(kruskal正向表形式) 17 3. 最小生成树(prim+binary_heap邻接表形式) 19 4. 最小生成树(prim+binary_heap正向表形式) 20 5. 最小生成树(prim+mapped_heap邻接表形式) 21 6. 最小生成树(prim+mapped_heap正向表形式) 22 7. 最小生成树(prim邻接阵形式) 23 8. 最小树形图(邻接阵形式) 24 四.图论_网络流 25 1. 上下界最大流(邻接表形式) 25 2. 上下界最大流(邻接阵形式) 26 3. 上下界最小流(邻接表形式) 27 4. 上下界最小流(邻接阵形式) 29 5. 最大流(邻接表形式) 30 6. 最大流(邻接表形式,邻接阵接口) 31 7. 最大流(邻接阵形式) 32 8. 最大流无流量(邻接阵形式) 32 9. 最小费用最大流(邻接阵形式) 33 五. 图论_最短路径 34 1. 最短路径(单源bellman_ford邻接阵形式) 34 2. 最短路径(单源dijkstra_bfs邻接表形式) 35 3. 最短路径(单源dijkstra_bfs正向表形式) 35 4. 最短路径(单源dijkstra+binary_heap邻接表形式) 36 5. 最短路径(单源dijkstra+binary_heap正向表形式) 37 6. 最短路径(单源dijkstra+mapped_heap邻接表形式) 38 7. 最短路径(单源dijkstra+mapped_heap正向表形式) 39 8. 最短路径(单源dijkstra邻接阵形式) 40 9. 最短路径(多源floyd_warshall邻接阵形式) 40 六. 图论_连通性 41 1. 无向图关键边(dfs邻接阵形式) 41 2. 无向图关键点(dfs邻接阵形式) 42 3. 无向图块(bfs邻接阵形式) 43 4. 无向图连通分支(bfs邻接阵形式) 43 5. 无向图连通分支(dfs邻接阵形式) 44 6. 有向图强连通分支(bfs邻接阵形式) 44 7. 有向图强连通分支(dfs邻接阵形式) 45 8. 有向图最小点基(邻接阵形式) 46 七. 图论_应用 46 1.欧拉回路(邻接阵形式) 46 2. 前序表转化 47 3. 树的优化算法 48 4. 拓扑排序(邻接阵形式). 49 5. 最佳边割集 50 6. 最佳顶点割集 51 7. 最小边割集 52 8. 最小顶点割集 53 9. 最小路径覆盖 55 八. 图论_NP搜索 55 1. 最大团(n小于64)(faster) 55 2. 最大团 58 九. 组合 59 1. 排列组合生成 59 2. 生成gray码 60 3. 置换(polya) 61 4. 字典序全排列 61 5. 字典序组合 62 6. 组合公式 62 十. 数值计算 63 1. 定积分计算(Romberg) 63 2. 多项式求根(牛顿法) 64 3. 周期性方程(追赶法) 66 十一. 几何 67 1. 多边形 67 2. 多边形切割 70 3. 浮点函数 71 4. 几何公式 76 5. 面积 78 6. 球面 79 7. 三角形 79 8. 三维几何 81 9. 凸包(graham) 89 10. 网格(pick) 91 11. 圆 92 12. 整数函数 94 13. 注意 96 十二. 结构 97 1. 并查集 97 2. 并查集扩展(friend_enemy) 98 3. 堆(binary) 98 4. 堆(mapped) 99 5. 矩形切割 99 6. 线段树 100 7. 线段树扩展 102 8. 线段树应用 105 9. 子段和 105 10. 子阵和 105 十三. 其他 106 1. 分数 106 2. 矩阵 108 3. 日期 110 4. 线性方程组(gauss) 111 5. 线性相关 113 十四. 应用 114 1. joseph 114 2. N皇后构造解 115 3. 布尔母函数 115 4. 第k元素 116 5. 幻方构造 116 6. 模式匹配(kmp) 118 7. 逆序对数 118 8. 字符串最小表示 119 9. 最长公共单调子序列 119 10. 最长子序列 120 11. 最大子串匹配 121 12. 最大子段和 122 13. 最大子阵和 123