网络流建模学习笔记

题目来源:《网络流建模汇总》 by Edelweiss 很好的学习资料,尽管题型并不全面(个人以为),但是有很多新的idea,推荐一下。

1.分析题目的限制

POJ 1149 PIGS

有 M 个猪圈,每个猪圈里初始时有若干头猪。一开始所有猪圈都是关闭的。依 次来了 N个顾客,每个顾客分别会打开指定的几个猪圈,从中买若干头猪。每 个顾客分别都有他能够买的数量的上限。每个顾客走后,他打开的那些猪圈中的猪,都可以被任意地调换到其它开着的猪圈里,然后所有猪圈重新关上。问总共 最多能卖出多少头猪。(1 <= N <= 100, 1 <= M <= 1000)

这道题里面猪很显然是流,人和猪圈设成点。但是题目的限制很奇妙:打开过的猪圈里的猪能跑,没有打开的不能跑。
所以简单的把人和猪圈弄成二分图显然不行 所以需要拆点 把选择的顺序考虑进去。
思路见原文 不过优化方法很值得借鉴。

2.网络流love二分

一些限制条件可以通过二分判断是否满流解决。
POJ 2391 Ombrophobic Bovines

给定一个无向图,点 i 处有 Ai 头牛,点 i 处的牛棚能容纳 Bi 头牛,每条边都有通过的时间,求一个最短时 间 T 使得在 T 时间内所有的牛都能进到某一牛棚里去。(1 <= N <= 200, 1 <= M <= 1500, 0 <= Ai <= 1000, 0 <= Bi <= 1000, 1 <= Dij <= 1,000,000,000)

时间不是流量,也不是费用,却是可达性的限制 所以只需要二分答案加边,判断能否满流即可。
SGU 438 The Glorious Karlutka River =)

有一条东西向流淌的河,宽为 W,河中有 N 块石头,每块石头的坐标(Xi, Yi)和最 大承受人数 Ci 已知。现在有 M 个游客在河的南岸,他们想穿越这条河流,但是 每个人每次最远只能跳 D 米,每跳一次耗时 1 秒。问他们能否全部穿越这条河 流,如果能,最少需要多长时间。 (0 <= N <= 50, 0 < M <= 50, 0 <= D <= 1000, 0 < W <= 1000, 0 < Xi < 1000, 0 < Yi < W, 0 <= Ci <= 1000)

答案不是简单的最大流或最小费用问题,而是询问距离的上界。
距离也不是最大流问题本身的优化目标,所以要通过二分或枚举确定界限,动态加边,然后转化为了判定问题:能否让所有人通过。

3.网络流love竞赛图

POJ 2699 The Maximum Number of Strong Kings

一场联赛可以表示成一个完全图,点表示参赛选手,任意两点 u, v 之间有且仅有 一条有向边(u, v)或(v, u),表示 u 打败 v 或 v 打败 u。一个选手的得分等于被他打 败的选手总数。一个选手被称为“strong king”当且仅当他打败了所有比他分高 的选手。分数最高的选手也是 strong king。现在给出某场联赛所有选手的得分序 列,由低到高,问合理安排每场比赛的结果后最多能有几个 strong king。已知选 手总数不超过 10 个。

看上去好复杂的样子,最优化目标不容易求
由于选手数字少,转而考虑枚举,判断是否可行。枚举集合还是个数呢?前者比后者容易(当然也不如后者优),不妨先尝试后者。
让谁承担充当strong king任务呢?随便选择吗?当然是获胜场数尽量多的人承担。
Question:会不会有这样一个Strong King甲,有一个普通人乙得分比他高呢?
Answer:感觉看上去有可能,事实上确实存在反例,不妨找一找试一试——
反例?
确实,对于一个分数不增的序列来说,他的SK(Strong King)真不一定连在一起
但是!题目只是要求合理安排!我们只要能把得分最高的都弄成SK就可以了!这只是说明上面的安排并不合理!
如果绿点能当SK,那么在一定有一种方案中蓝色是SK。绿色当SK要战胜的对手设为a,蓝色只需战胜a-1个对手;蓝色得分x,绿色得分为y,且 y<x 。只要 a1x 就存在这样一个方案,要推翻蓝色不能成为SK的结论,必须假设 a1>x ,这样 a>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值