网络流专题

来源:互联网 发布:淘宝买家如何改差评 编辑:程序博客网 时间:2024/06/05 06:08

刷网络流专题也有一周了,该进行下一个阶段的计划了,还有几道题留着产仔吧。

总结:只要模板好,没有题A不掉。

核心:建图。

分别写博客太费时间,一起汇个总吧。


POJ-3436 ACM Computer Factory

题意很迷,看完了都不造让你干什么。很难和网络流结合。

题意:一台电脑有p个零,有n台机器,每台机器可以给装上某些零件,也可以给卸载。求单位时间的最大生产量。

建图:以0为源点,源点和输入没有1的机器连边,容量为INF,机器本身连一条边,容量为其生产效率,如果一台机器产出效果满足另一台机器的输入要求,那么这两台机器也要连边,容量为INF,构造一个汇点,产出全为1的机器和汇点连边,容量为INF。源点到汇点求一个最大流即可。

提交代码:https://cn.vjudge.net/contest/170280#status/liuyuqiang0/A/0/



POJ-3281 Dining (推荐)

题意:n头牛,F种食物,D种饮料。n头牛都喜欢的各种食物和饮料,给一头牛分配一种食物和一种饮料能使其满足,每种食物和饮料只能被分配一次,求最多可以有多少头牛被满足。(目测此题数据较水,不拆点也能过)

建图:把牛拆点。以0为源点,和每种食物连一条边,容量为1,食物和牛的入点连边,容量为1,牛和牛的出点连边,容量为1,牛的出点和饮料连边,容量为1,饮料和汇点连边,容量为1.求一遍最大流即可。

提交代码:https://cn.vjudge.net/contest/170280#status/liuyuqiang0/B/0/



POJ-1087A Plug for UNIX (推荐)

题意:n种型号的插座,m种电器,每种对应一种型号的插座,k种适配器,可以用其中一种代替另一种。求最少有几个电器找不到插座。

建图:先跑一个floyd传递闭包。还是以0点为源点,分别和电器连边,容量为1,电器到插头连边,容量为1,插头和汇点连边,容量为1。求一波最大流。

这道题也可以用二分匹配写,建图类似。数据略坑。

代码:https://cn.vjudge.net/contest/170280#status/liuyuqiang0/C/0/



POJ-2195 Going Home (推荐)

题意:n*m的格子,每个格子上可以是人用m表示,也可以是房子用H表示,也可以是空白的。每个房子只能住一个人,每个格子上都可以同时容纳所有的人,保证人的数量和房子的数量相同,求所有人找到自己的房子所走的距离和的最小值。

建图:典型费用流,其实题意已经暗示怎么建图了。还是以0为源点,和所有的人建图,容量为1,费用为0,每个人和所有的房子建边,容量为1,费用为曼哈顿距离,所有的房子和汇点建边,容量为1,费用为0,求一波最小费用最大流。

代码:https://cn.vjudge.net/contest/170280#status//D/0/



POJ-2516 Minimum Cost(推荐)

题意:m个商店,每个商店售卖k种货物,每种货物都有一定的库存,n个顾客,每个顾客对每种货物都有一定的需求量。每个商家将每种货物运送至不同的客户都有一个费用。求是否能满足所有顾客的需求,输出总运输费的最小值。

建图:多源点多汇点的网络流,对每种商品分别建图求费用流,总的值就是答案,但需要判断每种商品的库存是否能满足所有顾客的需求。

代码:https://cn.vjudge.net/contest/170280#status//E/0/



POJ-1459 Power Network

题意:一个电网总共有n个点,np个供电站,每个供电站都有一定的电量储存,nc个客户,每个客户都有一个电量消耗的最大值,m条电线,每条电线都有其最大承载电量。求这个电网的最大消耗电量。

建图:还是以0点为源点,源点和供电站连边,容量为对应电站的电量。电线作为普通边。客户和汇点连边,容量为客户的最大消耗量。求一波最大流。

代码:https://cn.vjudge.net/contest/170280#status/liuyuqiang0/F/0/




HDU-4280 

Island Transport(推荐)


题意:n个小岛之间有m条无向运输路线,每条路线单位时间都可以运输一定的人,最左端的点为起点,最右端的点为终点。求单位时间最多能从起点至终点运输多少人。

建图:源点和汇点都已经给定,求最大流。但数据很大,对算法的高效性和有要求,用bfs+栈优化的ISAP可以过。

代码:https://cn.vjudge.net/contest/170280#status/liuyuqiang0/G/0/




HDU-4292 

Food


题意:和POJ-3281一样。F种食物D种饮料,每种都有一定的数量,n个人每个人都有自己的喜好,如果他喜欢的东西没有了那么直接离开,其实就是求最多有多少人两种都满足。

建图:0点为源点,源点到食物建边,容量为食物的数量,食物到人建边,人到饮料建边,容量都为1,饮料到汇点建边,容量为饮料的数量。求最大流。

题意:https://cn.vjudge.net/contest/170280#status//H/0/



HDU-4289 Control(推荐)

 

题意:n个城市m条无向边,给出两个点,间谍从一个起点到终点运输核武器。n个城市每个城市设置监察所都有一个费用,求需要设置多少个点总费用最小使得无法到达终点。

建边:拆点,把每个城市拆成出点和入点容量为其费用,其他所有的边容量都为INF。源点到起点连边,终点到汇点连边。求最大流。

代码:https://cn.vjudge.net/contest/170280#status/liuyuqiang0/I/0/



UVA - 10480 Sabotage

 (推荐)

题意:和上一个题很类似,上一个题是断多少点费用最小使得无法到达终点,这一题是断一些边费用最少使得无法到达终点。

这一题老实说不太会,这个题是一个定理:最小割定理。求完最大流后的残余网络中,残量大于0的和源点在一起作为S集合,剩下的作为T集合。把所有S-T的边断开即可。

代码:https://cn.vjudge.net/contest/170280#status/liuyuqiang0/J/0/



HDU-3605 Escape

 (推荐)

题意:n个人,m个星球。每个人可以适合一些星球,每个星球有最大的承载量。求是否所有人都能居住在外星球上。

建图:很卡时间。n的范围是1e5,而m的范围是10,如果直接建图边的数量可达2e6。所以肯定是要换方法的,据说可用多重匹配写。不过用网络流也是可以的,注意到m只有10,那么每个人所适应的星球最多有10个,也就是说可以将人划分为1024类,这样就极大缩小的点的数量,然后建图一波最大流即可。

代码:https://cn.vjudge.net/contest/170280#problem/M


  今天先到这了,下周,准确来说是明天开始下一个专题了。


原创粉丝点击