图论进阶篇

主要记录一些将要学习的图论知识,或者概念还不是很清晰的图论知识。
个人感觉有关图论的竞赛知识基本上已经学完了,下面就是如何的灵活运用qaq.

二分图的多重匹配

二分图多重匹配问题
例子,图示的效果很好

二分图的多重最大匹配(边数最大)

建立相应的模型,然后跑最大流
在原图上建立源点S和汇点T,S向每个X方点连一条容量为该X方点L值的边,每个Y方点向T连一条容量为该Y方点L值的边,原来二分图中各边在新的网络中仍存在,容量为1(若该边可以使用多次则容量大于1),求该网络的最大流,就是该二分图多重最大匹配的值。

二分图的多重最优匹配(边权和最大)

使用最大费用最大流
在原图上建立源点S和汇点T,S向每个X方点连一条容量为该X方点L值、费用为0的边,每个Y方点向T连一条容量为该Y方点L值、费用为0的边,原来二分图中各边在新的网络中仍存在,容量为1(若该边可以使用多次则容量大于1),费用为该边的权值。求该网络的最大费用最大流,就是该二分图多重最优匹配的值。

欧拉回路

无向图的欧拉回路

所有的点的度数都为偶数。

有向图的欧拉回路

所有节点的入度等于出度

混合图的欧拉回路

设一个节点D[i] = (out[i]-in[i]).

  • 若D[]中存在奇数,那么一定不会存在欧拉回路。因为改变任意一条无向边的方向,D[i]的奇偶性不会改变。
  • 若都是偶数,那么需要跑最大流,具体的说明见kuangbin模板的说明

    若初始D值都是偶数,则将G’改装成网络:设立源点S和汇点T,对于每个D[i]>0的点i,连边, 容量为D[i]/2;对于每个D[j]<0的点j,连边,容量为-D[j]/2;G’中的每条边在网络中仍保 留,容量为1(表示该边最多只能被改变方向一次)。求这个网络的最大流,若S引出的所有边均满流,则 原混合图是欧拉图,将网络中所有流量为1的中间边(就是不与S或T关联的边)在G’中改变方向,形成的 新图G’’一定是有向欧拉图;若S引出的边中有的没有满流,则原混合图不是欧拉图。

欧拉路径(不需要回到原点)

无向图的欧拉路径

有以下两种情况存在

  • 所有节点的度数都是偶数
  • 仅存在两个节点的度数为偶数,其它节点的度数都是偶数

有向图的欧拉路经

依旧有两种情况

  • 所有节点的入度等于出度
  • 仅有两个节点:一个节点的入度比出度大1,另外一个节点的入度比出度小1. 其余的入度等于出度。

混合图的欧拉路经

如果存在欧拉回路,一点存在欧拉路径了。否则如果有且仅有两个点的(出度-入度)是奇数, 那么给这个两个点加边,判断是否存在欧拉回路。

曼哈顿最小生成树

2-SAT

二分图的匹配以及各种等价的形式

看西工大的ppt和毛老师的ppt

三种最大流复杂度的比较以及适用的范围

刷完24题,虽然很早之前就已经立下了这个flag

边双联通分量的求解

加入最少的边,使得图变成边-强联通分量

一个有桥的连通图,如何把它通过加边变成边双连通图?方法为首先求出所有的桥,然后删除这些桥边, 剩下的每个连通块都是一个双连通子图。把每个双连通子图收缩为一个顶点,再把桥边加回来,最后的这 个图一定是一棵树,边连通度为 1。 统计出树中度为 1 的节点的个数,即为叶节点的个数,记为 leaf。则至少在树上添加(leaf+1)/2 条边,就能 使树达到边二连通,所以至少添加的边数就是(leaf+1)/2。具体方法为,首先把两个最近公共祖先最远的两 个叶节点之间连接一条边,这样可以把这两个点到祖先的路径上所有点收缩到一起,因为一个形成的环一 定是双连通的。然后再找两个最近公共祖先最远的两个叶节点,这样一对一对找完,恰好是(leaf+1)/2 次, 把所有点收缩到了一起。

未解决的问题

文章目录
  1. 1. 二分图的多重匹配
    1. 1.1. 二分图的多重最大匹配(边数最大)
    2. 1.2. 二分图的多重最优匹配(边权和最大)
  2. 2. 欧拉回路
    1. 2.1. 无向图的欧拉回路
    2. 2.2. 有向图的欧拉回路
    3. 2.3. 混合图的欧拉回路
  3. 3. 欧拉路径(不需要回到原点)
    1. 3.1. 无向图的欧拉路径
    2. 3.2. 有向图的欧拉路经
    3. 3.3. 混合图的欧拉路经
  4. 4. 曼哈顿最小生成树
  5. 5. 2-SAT
  6. 6. 二分图的匹配以及各种等价的形式
  7. 7. 三种最大流复杂度的比较以及适用的范围
  8. 8. 边双联通分量的求解
  9. 9. 加入最少的边,使得图变成边-强联通分量
  10. 10. 未解决的问题
{{ live2d() }}