图论基础 总结

零、图论杂项

有时为了方便把点的编号变成从 0 开始,或者添加一个 0 号点。(涉及二进制的、涉及 mod 的)如:万花筒(没找到 wwlw 的博客,wwlw 的博客里应该有,去博客园搜能找到其他博客(这篇这篇))、P4366 [Code+#4] 最短路。

图论题里可能有些边虽然意义不符合我们想要的,但是连了也没有影响,为了方便不妨连上。如:简单数学题(wwlw 2024.7.31 的 图论 Day 1 PPT 里的一道题)。

注意重边、自环。

要求边被经过 \(2\) 次 -> 建 \(2\) 遍(同一条)边。如:CF788B。

一、最小生成树

  • 稠密图——Prim
  • 稀疏图——Kruskal

最小生成树不能合并 -> 没有结合律 -> 不能分治。(分治需要结合律(?))

合适的数据范围 -> 合适的算法。根号分治。

外向树。外向生成树。如:P2573 [SCOI2012] 滑雪:(Prim 做法)拓扑序小的对拓扑序大的有影响。先走拓扑序小的 更优(不劣?)(在这个题中是先走高度更高的,这样可以看到更多的(有向)边,使以后选的边可能更优,而且能走到的高度更高的迟早会用这条边走到,所以先走这条边是不劣的)。(这个题的 Kruskal 做法和 Prim 做法差不多)

最小生成树处理连通性问题。

区间相关的东西可以考虑通过 前缀和 或 前缀 xor 和 建立图论模型(转换成连通性问题)(也可以考虑转成左开右闭区间来转换(欲知 \((i-1,i]\)—— 要使 \(i - 1\)\(i\) 连通(?)),用两种方法转换之后的题应该是一样的)。注意此时要考虑 0 号点。如:P5994 [PA2014] Kuglarz。

Kruskal 重构树

似乎可以理解成树上的笛卡尔树。(???)

分两种:点和边。

边:LCA 的点权 = 最小生成树上(?) 两点间路径上的最大边权。注意空间要开够(?)。

点:类似边的。

Kruskal 重构树可以处理树的链上的最值相关的问题。如:超级加倍(wwlw 2024.7.31 的 图论 Day 1 PPT 里的一道题)

二、最短路

把题抽象成最短路。

自己构的图(图不是数据给的,而是自己对某个题建立了图论模型后自己设计的图) 大概率(?) 不会卡自己(的 SPFA)。(?)

化边为点,新图里没有原来的点,原来的点描述原来的边之间连通的方式。代价与两条边都有关 -> 拆点(把一条边拆成两条边)。排序后前缀、后缀优化建图。如:P6822 [PA2012] Tax。

优化建图:考虑这条边被哪些边等效替代,使得那些边 尽量(?) 被 共用

最优化 DP,但是有环,转换成最短路问题。

三、强连通分量

缩写:SCC。

缩点。注意自环、重边怎么处理。新图是 DAG(?) ,可以 拓扑(?)。

注意:有题要求从 \(1\) 开始;但 \(1\) 所在的 SCC 不一定在新图上入度为 \(0\)

Tarjan 求 强连通分量、 点双(?) 、 边双(?) 一般(?) 可以当黑盒用。(?)

类比

  • DFS 搜索树:返祖边 -> 环。(?)
  • 拓扑序(DAG):拓扑序上前面的点往后面的点连边不会形成环。

四、欧拉回路 & 欧拉路径

欧拉路径 大概就是 一笔画。 每条边只能经过 1 次,每个点可以经过多次 (?)。

考虑点的度。

存在 欧拉回路 的条件(且):

  • 无向图:连通图(?)。所有点的度都是偶数。
  • 有向图:连通图(???)。所有点的入度都等于出度。

存在 欧拉路径 的条件(且):

  • 无向图:连通图(?)。只有两个点的入度是奇数(这两个点一个是起点,一个是终点)。其他点的入度都是偶数。
  • 有向图:连通图(???)。一个点的出度比入度大 \(1\)(这个点是起点),另一个点的入度比出度大 \(1\)(这个点是终点)。其他点的入度都等于出度。

求 欧拉路径(???) :直接 DFS。(?)技巧:邻接表 边从 \(- 1\) 开始 反向边:\(\operatorname { xor } 1\)。(这个技巧我还没懂) 直接搜是对的的原因(?) :入度 = 出度 -> 不会停留 -> 会把整个图搜完。

有个结论:无向图里加边。归纳得出(wwlw 的 PPT 里写的是归纳,我没证)无论怎么加边,图中都会有偶数个奇度数点。记奇度数点的个数为 \(k\),那么若 \(k > 0\),则至少需要 \(k / 2\) 条不相交的路径使得边被完美覆盖;若 \(k = 0\),则至少需要 \(1\) 条(欧拉路径,欧拉回路)。有个很巧妙的证明,见 wwlw 2024.8.1 的 图论 Day 2 PPT 中 Stroll 一题。似乎也可以用归纳法来证明。

五、2-SAT

六、优化建图

  • 前缀、后缀优化建图。
  • 线段树优化建图。
  • 拆位,每一个二进制位分别处理。
  • 为了方便连没有影响但意义不符要求的边。(这个算是优化建图吗?)

2024.8.2

posted @ 2024-08-02 08:29  huangkxQwQ  阅读(6)  评论(0编辑  收藏  举报