网络流题目总结

网络流总结

 

最大流

hdu 1532 DrainageDitches模板题

poj 2112 OptimalMilking

给定一张图,有K个机器,C头奶牛。求使距离机器最远的奶牛最小距离。

先二分距离,然后去掉大于距离的边建图,判断是否满流。

sgu-perspective

告诉你同分区每支球队的当前得分和剩余比赛场数,以及各支球队之间剩余的比赛场数,然你判断本队(编号为1)是否可能获得头名(允许分数并列)

先利用贪心的思想,假设本队剩余比赛都赢,判断此刻是否有队伍分数大于本队,如果有,则不可能。如果没有,计算出其余队最多能赢的场数。利用可赢的场次为流量,剩余比赛为节点。

源点向比赛节点连一条容量为剩余场数的边,比赛节点再向参赛双方的队伍节点各连一条容量为剩余场数的边,队伍节点向汇点连一条边,容量为最多能赢的场数。

判断能否满流,如果满流,则此分配方案可行。

 

poj 1149 PIGS

有N个顾客,有M个猪圈,每个猪圈有一定的猪,在开始的时候猪圈都是关闭的,
顾客来买书,顾客打开某个猪圈,可以在其中挑选一定的猪的数量,在这个顾客走后,可以重新分配打开猪圈的猪的数量,然后所有的猪圈会关闭,这样下一个顾客来了继续上面的工作。

解法:将顾客看作节点,新建一个源点与汇点
源点和每个猪圈的第一个顾客连边,边的权是开始时猪圈中猪的数目,重边则累加,要考虑顾客j紧跟在顾客i之后打开某个猪圈,则边<i,j>的权是无限大,每个顾客和汇点之间连边,边的权是顾客所希望购买的猪的数目。

hdu 3338 Kakuro Extension

题意:

     给一个表格的横纵和,用1~9去填,数字可重复,求一种解决方案。

       建图思路:

       从空白格任取一个数,假定这个数所在为i行j列。则这个数的数值既被包括在行之和中,也被包括在列之中。那么我们可以采用行进列出的思想。从原点连向行之和节点,从列之和节点连向汇点。 中间就通过任意的空白格节点将行之和与列之和连接起来。题目要求是1~9为有上下限的最大流。由于此题是求和。我们可以以0~8代替1~9。相应的行与列 之和需减去代替的个数。这样就化简成了普通的网络流。

       然而,这样其实还存在一个问题,实际上,每一个空白格节点左右各只有一条边,流进与流出都是相等的,那么这个节点其实可以省略掉。所以我们直接把节点化成了一条边。如果这个数属于第i行第j列(注意这里的i行j列不是原图中的,因为一行可能会拆成多个点),那么我们就把第i行的节点与第j列的节点之间连一 条容量为8的边。所输出的答案也就是这条边的流量。

hdu 2883 kebab

将肉块切分,判断满流。

 

hdu3605 Escape 最大流 + 状压缩图

题意:

 给n个人,m个星球。每个人可以去特定的几个星球,每个星球有特定的容量。问是否m个星球可以装下n个人?

 

起初直接构图,10万个点,边数也在10^6的数量级。直接就TLE了。

想想星球只有10个,每个人对应可去星球的状态只有2^10 。那么10万个人中肯定大部分人的状态都是重复的。那么我们可以把这些状态相同的人合并成一个点。

那么整张图的点最多只有2+2^10+10个。不同状态到星球的连线是inf,可去即可。边数也在10^4.

这道题用Dinic险过。

hdu 3081 Marriage Match II (最大流+二分+并查集)

题意:n个男孩和n个女孩,女孩选男孩,每轮游戏都必须选择不同的男孩。每轮游戏中,每个女孩可以选择和自己没有争吵的男孩,也可以选择和自己的好朋友没有争吵过的男孩。问最多可以进行几轮游戏。

解法:二分游戏数,源点向所有女孩建容量为mid的边,所有男孩向汇点建容量为mid的边。如果满流,说明可以进行mid轮游戏。用并查集处理女生的好朋友。

hdu 3277 Marriage Match III(最大流+二分+并查集)

n个男孩和n个女孩,女孩选男孩,每轮游戏都必须选择不同的男孩。每轮游戏中,每个女孩可以选择和自己没有争吵的男孩,也可以选择和自己的好朋友没有争吵过的男孩。而且每个女生除了自己没有吵过架的人外,最多可一和 k 个男生成为朋友,问最多可以进行几轮游戏。

解法:将女生拆点(i,i+n),中间连一条容量为k的边。i和没有争吵的男生连,i+n和其他男生连。其他同上。

 

hdu 3416 Marriage Match IV(最短路+最大流)

有 n 个城市,知道了起点和终点,有 m 条有向边,问从起点到终点的最短路一共有多少条。

解法:正向dijstra一次,反向dijstra一次。将一定在最短路上的边添加进网络,求最大流。

 

 

 

费用流

hdu 4322 candy

对有特殊效果的糖果跑最大费用最大流。

poj 2135 Farm Tour

简单的最小费用最大流。记得双向边。

 

hdu 4411 arrest

有 n+1 个城市编号 0..n,有 m 条无向边,在 0 城市有个警察总部,最多可以派出 k 个逮捕队伍,在1..n 每个城市有一个犯罪团伙,每个逮捕队伍在每个城市可以选择抓或不抓,如果抓了 第i  个城市的犯罪团伙,第 i-1 个城市的犯罪团伙就知道了消息  ,如果第 i-1 的犯罪团伙之前没有被抓,任务就失败,问要抓到所有的犯罪团伙,派出的队伍需要走的最短路是多少。

每个城市拆成两个点 i 和 i+n,费用为 -INF,容量为 1(费用为负,肯定会走)

 在源点和0 之间连一条费用为 0 容量为 k 的边

  在 0 和城市 1..n之间连一条费用为 0 到 i 最短路容量为 1 的边(表示出发)

 在 城市 n+1..n+n到汇点之间连一条费用为 0 到 i 最短路容量为 1 的边(表示回到总部)

  在 城市n+i..n+n 和 j(j>i)直间连一条费用为城市 i 到 j 最短路距离容量为 1 的边

派出的k个队可能有些队是不执行任务的,在 0 节点和 汇点之间连一条费用为0,容量为k的边。

 

hdu4780 candy factory

 

思路同上。

 

 


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值