《算法竞赛》10 图论

图的存储

  • 啥?邻接表和链式前向星不是一个东西吗。。。

拓扑排序

  • DFS求拓扑序似乎不太常见?了解就行。

欧拉路

  • 这些什么路径的定义确实挺难和名字对上号。。。但是正规题目应该都会给解释吧。
  • 欧拉路:从图中某个点出发,遍历整个图,图中每条边通过且只通过一次。
  • 欧拉回路:起点和终点相同的欧拉路。
  • 数据范围太大 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\) 就是答案)解决。

最小生成树

  • 严格次小生成树:倍增维护最小生成树上链的次小值。

最大流

  • Dinic 不一定在所有情况下都比 FF 好。

二分图

  • Hall 定理:对于一个二部图 \(G\sim(X,Y)\)\(X\) 存在一个匹配的充分必要条件为对于 \(X\) 的任意子集 \(S\)\(S\) 的邻居个数 \(N(S)\) 必须大于等于 \(S\) 的大小 \(|S|\)

最小割

  • 最大流 = 最小割。
  • 一个常用最小割建图技巧见 P3227。

费用流

  • 一种方法是把 Dinic 的 BFS 换成 SPFA。
posted @ 2024-01-12 10:58  牛肉爱吃dks  阅读(13)  评论(0编辑  收藏  举报