各种需要背记的图论知识

1.最小割的可行边和必须边

1.最小割的可行边

充要条件:
对于最小割中的边 ( u , v ) (u,v) (u,v)
如果满足:
1.该条边是满流的
2.在最大流后的残量网络上 , 不存在从 u 到达 v 的路径
那么 ( u , v ) (u,v) (u,v)为一条可行边

求法:
在残量网络上跑 tarjan 强联通分量 , 如果 u 和 v 在一个强联通分量中 , 那么 (u,v) 就不是可行边 , 反之若 u和v 不在同一个强联通分量中 , 那么(u,v) 是一条可行边

2.最小割的必须边

充要条件:
若边 ( u , v ) (u,v) (u,v)满足:
1.该条边是满流的
2.在残量网络中 , 源点 S 和 u ,v 和汇点 T , 分别存在可达的路径
那么 ( u , v ) (u,v) (u,v)为一条必须边

求法:
求出强联通分量后 , 直接判断 S和u , v和T 是否在一个强联通分量里即可

2.二分图匹配的可行匹配和必须匹配

1.假设原图存在一组一组完备匹配

对于匹配边(u,v) , 连边 (v,u)
对于非匹配边(u,v) , 连边(u,v)

可行匹配: 边 (u,v) 中 , 如果 u,v 在一个强联通分量中 , 那么该匹配为一组可行匹配
必须匹配: 匹配边 (u,v) 中 , 如果 u,v 不在一个强联通分量中 , 那么该匹配为一组必须匹

这是因为一个具有完备匹配的二分图的可能的更换匹配的方案 , 只有是经过一条匹配边与非匹配边交替的环才有可能

2.不存在完备匹配

这时还可能出现一些没有匹配上的点和已经匹配上的点进行替换的情况

考虑增加源汇点来像上面一样构造环

对于匹配边(u,v) , 连边 (v,u)
对于非匹配边(u,v) , 连边(u,v)
对于左边的匹配点 , 连边(u,S)
对于左边的非匹配点 , 连边(S,u)
对于右边的匹配点 , 连边(T,v)
对于右边的非匹配点 , 连边 (v,T)

其实就是求一遍网络最大流后的残量网络

这之后和上面一样判断:

可行匹配: 边 (u,v) 中 , 如果 u,v 在一个强联通分量中 , 那么该匹配为一组可行匹配
必须匹配: 匹配边 (u,v) 中 , 如果 u,v 不在一个强联通分量中 , 那么该匹配为一组必须匹

2.最短路径中必经边

首先建立最短路径 DAG

那么有如下两种做法:

  1. 对于一条边 求出起点到它和它到终点的最短路径条数数 , 分别记做 f [ v ] , g [ v ] f[v],g[v] f[v],g[v] , 然后求出起点到终点的最短路径条数 F, 如果 f [ v ] ∗ g [ v ] = = F f[v]*g[v]==F f[v]g[v]==F 那么说明这条边是必经边
  2. 把起点到终点的最短路径DAG给抠出来 , 然后把这个建成无向图 , 其中的桥就是必经边

3.竞赛图中的最小环&三元环计数

竞赛图中要么没有环,要么最小环是三元环!!(归纳证明)

三元环计数:
首先可能的总的三元环个数是 C ( n , 3 ) C(n,3) C(n,3)
然而显然不会任意三点都构成了三元环,有什么情况会出现错误呢?

当且仅当这个伪三元环环其实是一个拓扑图(DAG)的时候会算错

我们只需要考虑一个点如果有多条出边时的不合法情况,这样就不重不漏了,显然每两条出边都会导致一个三元组不是一个三元环,所以总的竞赛图中三元环个数为:
C ( n , 3 )    −    ∑ C ( d [ u ] , 2 ) C(n,3)\;-\; \sum C(d[u],2) C(n,3)C(d[u],2)

如果要求期望三元环个数 , 把不确定的边讨论一下算对后面那部分的贡献就行了

4.某些神奇的图论定理

1.霍尔定理: 二分图G存在完美匹配当且仅当X中的任意k个点至少与Y 中的k个点相邻.

2.平面图的性质: 忽略重边和自环后边数 ≤ 3 n − 6 \leq 3n-6 3n6

3.欧拉定理: 若平面图G的顶点数,边数,和面数(平面被分割的块数)分别为: V , E , F V,E,F V,E,F,那么:
V − E + F = 2 V-E+F=2 VE+F=2

5.prufer 序列小结

prufer序列是一种从无根树到一个序列的映射,可以证明一个有标号的无根树存在一个唯一的prufer序列与之对应

一棵 n n n 个节点的树对应了一个长度为 n − 2 n-2 n2 的prufer序列

从 无根树到 prufer序列

每次摘去无根树上的一个编号最小叶子(度数为1的点),并把与之相邻的点加入prufer序列,最后剩下两个点不用管了

所以prufer序列长度为 n-2

性质:

  1. 一个点在prufer序列中的出现次数为它的度数减一
  2. 要求出每个点的度数恰好为 d i d_i di 的无根树个数,只需求出prufer序列个数,容易发现这是一个可重排列:
    ( n − 2 ) ! ∏ i = 1 n ( d i − 1 ) ! \dfrac{(n-2)!}{\prod_{i=1}^n (d_i-1)!} i=1n(di1)!(n2)!

从 prufer序列到无根树

每次取出prufer序列中最前面的元素u,在点集找到编号最小的没有在prufer序列中出现的元素v并给u,v连边,之后把 u 在prufer序列删去,把 v 在点集中删去。
最后在点集中剩下两个节点,给它们连边即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值