Problem #2182:EOJ 2182 Dining
题目大意:老题了。食物,饮料分配给奶牛,每头牛有他爱吃和不爱吃的。求怎么匹配能让更多牛满足。
思路:
1、只要熟悉网络流就应该会想到一个 S-水-牛-饭-T 一类的建图。每条边权值为1,类似于二分图匹配,然后高高兴兴地跑了一遍最大流。然后错了。
2、然后你就开始想这是怎么回事,在草稿纸上开始画起了图。S——A1——B1——C1——T,似乎十分正确。
3、惊鸿一瞥,你看到如果存在一头奶牛,能够吃两种套餐的时候,该点有2的流量进,2的流量出,也就是说,一头牛吃了两顿大餐,这是我们无法接受的。不能因为多吃一顿就多算一次。
4、那么怎么办呢?其实很好想,拆点!牛拆成<牛1——牛2>。牛1留着和之前的食物匹配,牛2留着和饮料匹配。这样一来,就能保证每头牛不多吃抢吃了。跑最大流,完毕。
思考:
细一看其实就是把两个二分图并起来了,姑且把这类题目称作“二分图两次连续最大匹配”
Problem #3400:EOJ 3400 Admiral
题目大意:两条不相交最短路径和。
思路:
1. 按照题目的数据,若联通,则连一条流量1,费用为给出的边。
2. 超级源点连源点,终点连超级终点。流量2,费用0.
3. 跑最小费用最大流。
思考:
对于n条路径和来说,也是如此。把流量改成n即可
若要判断存在性,即判断流量是否小于n
Problem #3396:EOJ 3396 度度熊的交易计划
题目(中文直接放题目):
度度熊参与了喵哈哈村的商业大会,但是这次商业大会遇到了一个难题:
喵哈哈村以及周围的村庄可以看做是一共由 n个片区,m条公路组成的地区。由于生产能力的区别,第 i个片区能够花费 ai元生产 1 个商品,但是最多生产 bi个。同样的,由于每个片区的购买能力的区别,第 i个片区也能够以 ci的价格出售最多 di个物品。
由于这些因素,度度熊觉得只有合理的调动物品,才能获得最大的利益。据测算,每一个商品运输 1 公里,将会花费 1 元。那么喵哈哈村最多能够实现多少盈利呢?
思路:
1. 题目中涉及了两个量,一个叫商品,一个叫价格。大致意思也就是说在有限的商品下,合适分配,从而获得最大收益。
2. 每个点都有一定的性质:都能产出商品,都能卖出商品,并且都有限。然后思考在单点情况下的构图。如何做到呢?
源点S—>当前点P 构造一条边,流量为bi(生成bi最多)价格为ai(生产1个单位需要ai元)
当前点P—>汇点S 构造一条边,流量为di(卖出di最多)价格为ci(卖一个可以赚ci元)
3. 这时候思考,必然ci ai有一个为负数,讲道理来说,应该是ai是负数,因为是耗钱。然而我们需要的是最小费用最大流,那怎么办呢?取反。所以我们将连向汇点的边权从ci变成-ci,而ai保持不变。
4. 然后在思考城镇运输的情况。首先,道路运输没有负载,所以加边必定是无限流量,然后,运送时每单位商品消耗价格与城镇距离成正比,所以边权时应该是一个负数,值为城镇距离长度。但我们因为进行了取反操作,所以城镇之间连一条流量无限,费用为距离的边(双向)。
5. 然后再跑最小费用可行流。
6. 将获得的答案取反(成为了最大费用可行流)
注:什么是可行流?其实就是跑最小费用流,但你跑着跑着你会发现从某条路径开始起,你开始亏钱了。那是不能接受的,亏钱就停了。
Problem #3397:EOJ 3397 Dual Core CPU
题目大意:
有两个集合A,B。有一系列元素需要放在A或者B两个集合其中一个里。对于任意的元素,放在A和B中的开销不同。另外,有些元素对如果不在一个相同集合里,会产生额外开销,求分配元素的最小开销。
思路:
1、 其实看原题的时候,我第一感觉:难道又是一题费用流?后来发现不对,这道题虽说是在讲“开销”,但题目大意被我这么抽象地一改动,它其实是在讲“集合的分配”。
2、 对于某一元素,要么在A,要么在B。题目要求我们要把这堆元素一分为二,并让我们求得最小开销。
3、 “割”:通俗地理解割,就是在一张有源点汇点地网络流图中,把它通过某种方式切开,使得分割下来的子图个个独立,不再联通。即割完以后,就会出现两个独立集合,一个有A,一个有B。
(另:最大流 = 最小割不做证明)
4、 通过割的思想,我们初步观察,如果不考虑元素对的影响,这个题目的一种解法就是把A,B集合看成源点汇点,与每个元素都连一条边,流量为开销大小。跑最大流出解
5、 接下来思考如何处理元素对:(由直觉:两点连边)
我们要所考虑的是,在割的过程中,让元素对“切不干净”。按常理,比如a->A,b->B只要分别咔嚓左一刀右一刀就结束了。但是因为我们想让它切不干净,需要补一刀才行,就可以在a,b节点中在练一条边,流量大小为元素对的开销。这样一来,如果是左右一刀切,不会产生粘连现象(虽然内部粘着,但是我们切的时候是只看外表的)。但是如果左一刀右一刀,就会产生粘连现象,需要额外的开销。
6、 到此,整个构图完毕,求最小割,跑最大流,结束。
归类:
1. 最小割 2.独立集合分配问题
Problem #3402:EOJ 3402 最大获利
题目:
新的技术正冲击着手机通讯市场,对于各大运营商来说,这既是机遇,更是挑战。THU 集团旗下的 CS&T 通讯公司在新一代通讯技术血战的前夜,需要做太多的准备工作,仅就站址选择一项,就需要完成前期市场研究、站址勘测、最优化等项目。
在前期市场调查和站址勘测之后,公司得到了一共N 个可以作为通讯信号中转站的地址,而由于这些地址的地理位置差异,在不同的地方建造通讯中转站需要投入的成本也是不一样的,所幸在前期调查之后这些都是已知数据:
- 建立第 i 个通讯中转站需要的成本为 Pi (1≤i≤N)。
- 公司调查得出了所有期望中的用户群,一共 M 个。关于第 i 个用户群的信息概括为 Ai,Bi,Ci:这些用户会使用中转站 Ai 和中转站 Bi 进行通讯,公司可以获益 Ci。(1≤i≤M,1≤Ai,Bi≤N)
THU 集团的 CS&T 公司可以有选择的建立一些中转站(投入成本),为一些用户提供服务并获得收益(获益之和)。那么如何选择最终建立的中转站才能让公司的净获利最大呢?
思路.
1. 获利 = 收益 - 投入
2. 最大权闭合图
3. 把用户群和中转站看成n+m个点,每个点有一个权值,用权值的正负表示获利还是花费。
4. 满足用户群vi,必须建造Ai和Bi,连边<vi, Ai>, <vi, Bi>。
5. 得到一副图,而本题所求的最大获利显然就是最大权闭合图的权。
6. 于是,s连到每个用户群vi,权值为Ci,每个中转站ui连到t,权值为花费Pi,原图中<vi, Ai>,<vi, Bi>的权值全部设为INF。
7. 最大权闭合图的的权 = 原图中权值为正的点的和(所有用户的收益之和) - 最小割(最大流)
感觉讲不来了参考:http://blog.csdn.net/u011265346/article/details/43053193
对这类模型不够了解透彻。
(上)结束。
有源码,懒得传。