图的存储
拓扑排序
欧拉路
- 这些什么路径的定义确实挺难和名字对上号。。。但是正规题目应该都会给解释吧。
- 欧拉路:从图中某个点出发,遍历整个图,图中每条边通过且只通过一次。
- 欧拉回路:起点和终点相同的欧拉路。
- 数据范围太大 DFS 会爆栈,需要用栈模拟递归。
无向图的连通性 & 有向图的连通性
- 割点割边还有连通分量什么的求法可以现推。
- Kosaraju 算法:可以 \(O(n+m)\) 找到每个 SCC。对于一个有向图 \(G\),建反图 \(rG\),从 \(G\) 上每个没有被 DFS 到的点开始 DFS,按回溯顺序从小到大编号,然后在 \(rG\) 上按编号从大到小开始 DFS,每次 DFS 即找到一个 SCC。
基环树
- 看到每个点连一条边的题想到基环树(森林)
- 找无向图基环树的环可以用类似拓扑排序的 BFS,每次找度数为 \(1\) 的。
2-SAT
最短路径
- 传递闭包可以用于解决 DAG 最小可重链覆盖。
- SPFA 优化:
- SLF:使用双端队列,入队时与队头比较,比队头大插队尾,否则插队头。
- LLL:计算所有点距离平均值 \(x\),队头出队时与 \(x\) 比较,比 \(x\) 大就去队尾,否则出队。
- 最优比率环:最大化 \(\frac{权值}{环长}\),用 \(0/1\) 分数规划(最大化 \(\frac ab\),估计一个值 \(x\),使 \(\frac ab\ge x\),移项得 \(a-bx\ge0\),二分找到最大的 \(x\) 就是答案)解决。
最小生成树
最大流
二分图
- Hall 定理:对于一个二部图 \(G\sim(X,Y)\),\(X\) 存在一个匹配的充分必要条件为对于 \(X\) 的任意子集 \(S\),\(S\) 的邻居个数 \(N(S)\) 必须大于等于 \(S\) 的大小 \(|S|\)。
最小割
- 最大流 = 最小割。
- 一个常用最小割建图技巧见 P3227。
费用流
- 一种方法是把 Dinic 的 BFS 换成 SPFA。
posted @
2024-01-12 10:58
牛肉爱吃dks
阅读(
17)
评论()
编辑
收藏
举报