网络流经典模型

DAG最小路径点覆盖二分图匹配 


1.路径不能相交

  • 把原图G拆点,建出一张二分图,对于每一条有向边<x,y>在二分图左部点x和右部点y之间连边,得到G‘
  • G的最小路径点覆盖包含的路径条数就是(n-G’的最大匹配数)
  • 对于每条路径的终点t,t没有出边,所以在二分图中t匹配失败,即路径的终点和二分图左部非匹配点是一一对应的
  • 所以让路径最少,就让非匹配点最少,那么就让匹配点最多,故为(n-G‘的最大匹配数)

2.路径可以相交

  • 若两条路径u->p->v和x->p->y在点p相交,我们就在原图中添加一条边<x,y>,让第二条路经直接走x->y,即可避免重复点p
  • 进一步地,如果我们把所有联通的点对都连一条边,那 “ 可相交 ” 就一定能转化成 “ 不相交 ”
  • 综上,DAG G的最小路径可重复点覆盖,等价于先对原图进行传递闭包,得到新图G',在对G'求不相交的最小路径点覆盖

 

输赢分配最大流


  • 这个讲的非常好
  • 简单来说就是你要分配剩下的k场比赛,必定有k个赢局要分配给一些队伍,这些队伍赢得局数不能超过一些限制,如果最大流能跑满k,就可以分配,如果跑不满k,必定存在多出来的比赛分给一些已经分满的队伍,此时我们钦定的那个要赢的队伍就不能赢了

 

最大权闭合子图最小割


  • 题目描述:有一些点,每个点有权值,有一些形如<x,y>的限制,即如果选y就必须选x,选择一个权值最大的子图
  • 建一个二分图,正权点位于左部,负权点位于右部
  • 从源点S向每个正权点连一条容量为权值的边,每个负权点向汇点T连一条容量为权值的绝对值的边
  • 如果存在<x,y>就从x向y连一条容量为inf的边
  • 求它的最小割,答案即为(\sum正权-最小割)
  • 最小割=(不选的正权之和+要选的负权绝对值之和)
  1. 如果一个正权边容量小于他流过的负权边的容量,那么它对最大流的贡献就是它自己的容量,即为不选的正权值
  2. 如果一个正权边容量大于他流过的负权边的容量,那么它对最大流的贡献就是它流过的负权边,即为要选的负权绝对值
  • 最大权闭合子图=(正权之和-不选的正权之和-要选的负权绝对值之和)=  正权值和 - 最小割
  • 因为正权值和是定值,而最小割保证值最小,所以最大权闭合子图一定最优
  • 练习题目

 

最大密度子图最大权闭合子图


  • 选出一些点集,使\frac{E}{V}最大,E是两端点都在点集中的边的数量,V是点的数量
  • 二分一个答案mid,问题转化为是否 E-mid*V>=0
  • 很显然选孤立的一个点是不优的,因为还不如不选
  • 所以我们可以一条边一条边地选
  • 建一个二分图,边位于左部,点位于右部,每条边向它的两端点连边
  • 每条边权值为1,每个点权值为-mid,问题就变成了求最大权闭合子图

 

区间K覆盖费用流


  • 给定n个区间,类似于(a,b),每个区间有一个价值,现在可以取任意个区间,但每个区间只能取一次,又要求数轴上的每个实数点被选取不超过k次,求这些约束条件下可以得到的最大价值
  • 首先对区间端点进行离散化,用离散后的端点进行建图。对于某个区间(a,b),建边a->b,容量为1,费用为此区间的价值,这样意味着每个区间只能被选一次。
  • 另外对于离散化后的端点,从源点向第一个点连边,容量为k费用为0,从最后一个点向汇点连边,容量为k费用为0,然后相邻的两点i和i+1,连边i->i+1,容量大于等于k费用为0。
  • 这样建图的话,可以发现对于一个流量为1的流,选取的区间一定不会发生重叠,于是最多选取k次,满足题意要求。
  • 最后直接输出费用流结果即可。
  • 练习题目

 

一类组队问题/时间分配问题


  • 先咕着
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值