ACM/ICPC代码库jojer&Fandywang是一份由吉林大学计算机科学与技术学院2005级学生在2007-2008年间编写的经典算法教程,涵盖了广泛的计算机科学基础知识,旨在帮助学生们提升在ACM竞赛中的解题能力。这份资源着重于算法设计与分析,包括但不限于图论、网络流、数据结构等多个关键领域。
1. **图论**部分:
- **深度优先搜索(DFS)**:用于标记DAG的节点。
- **桥梁查找**:在无向图中识别桥。
- **连通度与割**:分析无向图的连通性和割的概念。
- **最大团问题**:使用动态规划和深度优先搜索解决。
- **欧拉路径与欧拉回路**:探索无向图上的欧拉性质。
- **最短路径算法**:DIJKstra算法(O(N^2) 和 O(E*LOGE))、Bellman-Ford(单源最短路,O(VE))和SPFA(更快的最短路径算法)。
- **第K短路**:包括Dijkstra和A*搜索方法。
- **最小生成树**:Prim算法求最小生成树和次小生成树(O(V^2))。
- **生成森林问题**:最小生成森林(O(MLOGM)),涉及多棵树的情况。
- **有向图**:最小树形图、最小Steiner树、强连通分量(Tarjan算法)。
- **弦图**:判断和完美消除点排列。
- **稳定婚姻问题**:用O(N^2)算法解决。
- **拓扑排序**:对无向图进行排序。
2. **网络流**:
- **二分图匹配**:包括匈牙利算法的DFS和BFS实现,以及Hopcroft-Karp算法。
- **最佳匹配**:Kuhn-Munkres算法(O(M*M*N))。
- **最小割**:无向图的最小割问题(O(N^3))。
- **流问题**:最小上界/下界流,Dinic最大流(O(V^2*E))、HLPP最大流(O(V^3))、最小费用流(O(V*E*F)和O(V^2*F))。
- **割集**:最佳边割集、最小点割集等。
- **路径覆盖**:最小路径覆盖(O(N^3))和最小点集覆盖。
3. **数据结构**:
- **日期计算**:求特定日期对应的星期几。
- **树状数据结构**:左偏树合并(O(LOGN))、树状数组和二维树状数组。
- **字符串处理**:Trie树(K叉和左儿子又有兄弟结构)、后缀数组(O(N*LOGN)和O(N))。
- **区间查询**:RMQ离线算法(O(N*LOGN) + O(1))。
这份资源不仅是ACM竞赛的实战指南,也是学习理论算法和数据结构的良好教材,涵盖了图论、优化算法和基础数据结构的核心内容,对于提高编程技能和解决实际问题具有重要意义。