网络流
文章平均质量分 78
sdj222555
这个作者很懒,什么都没留下…
展开
-
POJ 3762 The Bonus Salary! 最小费用最大流
题意最后可以简化为给出若干个区间,每个区间由左端点,右端点, 权值构成。挑出若干个区间,使得权值和最大,但必须满足区间任意部分重叠次数不超过k这题跟POJ3680一样一样的构图是这样先把这些区间都给hash了。 hash完必然这些区间端点都落在1,2,3..., cnt 这些数中, cnt是hash完 不同数的个数然后建边, 源点为S,汇点为TS到1原创 2015-01-23 16:23:23 · 1208 阅读 · 0 评论 -
POJ 3084 Panic Room 最小割
题意很蛋疼,看了好久才明白过来什么意思大意就是,有一些房间,初始时某些房间之间有一些门,并且这些门是打开的,也就是可以来回走动的,但是这些门是确切属于某个房间的,也就是说如果要锁门,则只有在那个房间里才能锁,这跟现实很符合啊,不然随便个人站你家外边把你门给锁了是什么情况。 现在一些房间里有一些恐怖分子,要搞破坏,但是我们现在有个房间很重要,不能被他们破坏,这就需要锁一部分的门,不让恐怖分子有可原创 2012-07-29 14:26:40 · 1758 阅读 · 0 评论 -
HDU 3879 Base Station 最大权闭合图
一道稍微有点变形的题对每条边,新增一个点代表这条边,该边点与边的两个端点分别连有向边,容量为无穷大,此时就转化为了一个最大权闭合图的模型,该边点的权值为正,而两个端点的权值则为负,按照普通建图方法建图即可。#include #include #include #include #include #include #include #include #include #de原创 2012-07-28 23:53:05 · 928 阅读 · 0 评论 -
POJ 2987 最大权闭合图
请参考胡伯涛的论文《最小割模型在信息学竞赛中的应用》闭合图的概念就很好引出了。在一个图中,我们选取一些点构成集合,记为V,且集合中的出边(即集合中的点的向外连出的弧),所指向的终点(弧头)也在V中,则我们称V为闭合图。最大权闭合图即在所有闭合图中,集合中点的权值之和最大的V,我们称V为最大权闭合图。首先引入结论,最小割所产生的两个集合中,其源点S所在集合(除去S)为最大权闭原创 2012-07-28 20:28:46 · 3097 阅读 · 0 评论 -
POJ 2699 枚举+最大流
这应该说是比较神的一个题目了题意的话,就是有n 个人,两两之间打比赛,每场比赛赢的人加一分,总共呢有n*(n-1)/2个比赛,然后求这样一种人的个数,就是能赢所有比自己分高的人或者他就是分最高的人。 当然我们是求这种人可能的最大个数, 建图的话,就要分两种点,人和比赛,很显然,源点到所有的人建边,容量是该人的得分,所有比赛与汇点建边,容量为1。那么现在要处理的就是人与比赛的关系了。当原创 2012-07-28 18:46:27 · 3035 阅读 · 3 评论 -
POJ 2516 Minimum Cost KM算法 或者 最小费用最大流
这题还是挺裸的当然 是用最小费最为方便。建图一目了然KM麻烦那么一点,就是每个物品要拆成一份一份的。建图的时候注意,KM匹配的模板一定是左边的点数不大于右边的点数 至少我的模板是这样的在本题中,要求供应商提供的东西要满足商店的需求,不能满足就直接输出-1, 所以理论上商店的点应该比供应商少,商店的点应该放在左边,供应商放在右边由于是最小权匹配,所以我这里用了一个比较大原创 2012-08-11 14:55:08 · 1610 阅读 · 0 评论 -
SPOJ 371 Boxes
题意就是有一些盒子,放在一个圈上,每个盒子中有若干个球,球的总数不会比盒子的数量多。现在规定相邻的盒子之间可以把球移动过去,每次可以移动一个球,问用最少的步骤使得每个盒子中的球不超过1个那么建图还是比较简单源点跟每个点连接,容量为本来拥有的球数每个点再与汇点连,容量为1中间相邻的点之间连边,容量无穷,费用为1#include #include #in原创 2012-08-08 18:17:21 · 903 阅读 · 0 评论 -
SGU 194 无源汇的上下界可行流
很裸的模板题,直接搞起#include #include #include #include #include #include #include #include #include #define MAXN 555#define MAXM 555555#define INF 1000000007using namespace std;struct n原创 2012-07-24 21:57:14 · 1722 阅读 · 0 评论 -
POJ 2396 Budget 上下界网络流
这是一道比较基础的上下界网络流了上下界网络流的算法完全是参考论文《一种简易的方法求解流量有上下界的网络 》 还有 《最大流在信息学竞赛中应用的一个模型 》然后http://blog.csdn.net/water_glass/article/details/6823741说的也是比较详细具体的解法不再多说了,网络流的算法一直是比较麻烦,代码量还大,我看了好久才明白算法是啥意思。总体来原创 2012-07-24 16:18:01 · 809 阅读 · 0 评论 -
POJ 3189 枚举+最大流
注意到题中是所有牛中最高选择的等级和所有牛中最低等级之差最小就可以想到枚举区间长度 然后 枚举起点 来进行最大流了#include #include #include #include #include #include #include #include #include #define eps 1e-5#define MAXN 1111#define MA原创 2012-07-29 18:57:34 · 798 阅读 · 0 评论 -
POJ 3204 最大流
题目大意是这样,找这样一种边的个数,就是增加该边的容量,可以使得最大流变大那么首先我们求一遍最大流,如果某条边符合我们的要求,那么这条边必然是满流的,否则增加容量也没有用,然后假设端点为u->v,那么必然存在从源点到u的不饱和的路径,也就是路径上的每条边都是不满的,同样从v到汇点也应该有这样的路径,也只有这样才会在该边增加容量后形成一条增广路。那么我们搞定这个问题的方法就是DFS了,从源点原创 2012-07-30 00:50:44 · 2023 阅读 · 0 评论 -
POJ 3308 二分图最小点权覆盖 最大流
本题题意就是,公元XXXX年,地球跟外星人打仗,然后有一个n*m的网格,会有外星人降落到某些位置上,因为外星人比较猛,所以必须一下来就消灭他们,现在可以在某些行或者某些列的首部放一些激光枪。这些枪的特性就是你放在行的首部你就消灭这一行的敌人,放在列的首部就消灭一列的敌人。但是放置这些枪也需要一定的费用,这些费用已经给出来了,最后总费用是这些枪的费用之积,现在要求最小的这个费用。看到积之后,我们原创 2012-07-30 16:16:38 · 1010 阅读 · 0 评论 -
有限制的最小费用最大流 格格取数
给你一个m x n (1 ij这个题目有个限制,不然就非常简单了,每行每列至少选择了一个数,即每行可以多选,这与平常所做的那种简单的最小费用最大流有些不一样。那么在建图上我们需要做出一些变化还是那样每行每列都对应一个结点我们需要强制其每行每列都选择到了数首先源点向每个行结点连容量为1,花费为-100000的边每个列结点向汇点连容量为1,花费为-100000的边,原创 2014-10-23 16:43:49 · 949 阅读 · 0 评论 -
UVA1440 有下界的最小流
题意很简单:给出一张有向图,每次你可以从图中的任意一点出发,经过若干条边后停止,然后问你最少走几次可以将图中的每条边都走过至少一次,并且要输出方案这个转化为网络流的话,就相当于 求一个最小流,并且存在下界,即每条边至少走一次这让我联想到很久之前的一道题,也是有向图,问走多少条路径可以将整个图中的每条边都走过,但是跟本题不同的是,那题是不允许重复走边的。那道题目的解是这样的:原创 2014-10-22 21:14:01 · 1625 阅读 · 0 评论 -
SGU 176 Flow construction 有源汇 有上下界的最小流
题意就是给出一个图。有源汇然后每条边都有容量的上下界限制。问的是是否有一个最小流,使得每条边得流量都满足流量限制,并且流量守恒我使用的是二分的方法。每次二分都要重新构图,然后计算。#include #include #include #include #include #include #include #include #include #include原创 2013-10-31 10:47:23 · 1677 阅读 · 0 评论 -
Uvalive 4865 Data Recovery 最大流
题意就是给一个50 * 50的矩阵然后给出每行每列元素的和和一个初始矩阵矩阵中有些是未知,有些是已知然后我们求目标矩阵就是把能确定的元素的值求出来,实在不能确定的就置为-1所有矩阵元素的值在0-100之间看到范围很小。第一反应是求一个最大流先把已经给出的元素都从每行每列的和中减掉。然后左边为行结点,右边为列结点然后源点向行结点连边列结点向源点原创 2013-10-15 13:09:44 · 973 阅读 · 0 评论 -
UVALive 4957 Fake scoreboard
题意就是有n个队伍和m个题目给出了每个队伍解决的题目数量每个题目也给出了被解决的次数然后求一个方阵。N,Y表示每个队伍是否过了哪个题目。要求字典序最小。这题给人的第一反应就是网络流。虽然用网络流并不是最优算法。但绝对是最直观的。行和列分成两部分点。源点向行连边。行向列连边列向终点连边就行了然后字典序要求最小。原创 2013-10-06 00:31:07 · 1403 阅读 · 0 评论 -
POJ 3498 拆点 最大流
大概题意:在南极的海洋上, 有一些企鹅站在一些浮冰上,这些企鹅想聚在一块,也就是到某块浮冰上聚会, 但是它们不想游泳,只想从一块浮冰跳到另一块上,自身的跳跃距离题中已经给出来了,然后是每个浮冰的坐标,该浮冰上已经有个多少个企鹅,以及浮冰的承受能力,所谓承受能力不是指能载动多少企鹅,题目中说了每个浮冰载企鹅是没有问题的,但是从浮冰往外跳会导致浮冰破损,这里的承受能力就是能跳出去多少次企鹅原创 2012-08-01 19:06:10 · 788 阅读 · 0 评论 -
POJ 3469 最小割 最大流
题意就是有n个模块,每个模块可以运行在两个核心上,A核心和B核心,相应的有一个花费,有一些模块如果不在一个核心上运行就会产生额外的花费现在要求最小的花费是的所有模块都运行建图如下:每个模块点,源点与其连边,容量为A花费,在用其与汇点连边,容量为相应B花费然后如果有某对模块之间不运行在一个核心上会产生额外的花费,就对这两点建双向边,容量都为那个额外的花费然后就是最小割模型原创 2012-08-01 15:07:45 · 1367 阅读 · 0 评论 -
POJ 2125 最小点权覆盖 最大流
题意就是 有一个图, 两种操作,一种是删除某点的所有出边,一种是删除某点的所有入边,各个点的不同操作分别有一个花费,现在我们想把这个图的边都删除掉,需要的最小花费是多少那么本题的话,我们看到是要删除所有的边,但只需要在两个端点中的一端进行删除即可,这就可以联想到了最小点权覆盖了。一般对有向图而言,我们经常进行的就是拆点,将每个点拆成两个点,一个点是代表边从这出来,一个代表边从这进去原创 2012-07-30 22:20:41 · 1398 阅读 · 0 评论 -
POJ 3680 最小费用最大流
建图如下若限制为k首先将坐标离散化。对每个区间,左端点对应的编号到右端点对应的编号建一条边,容量为k,费用为负权然后对每个编号i,建立i到i+1的边,容量为k,费用为0起点和编号1连边,容量为k,费用0最后一个编号和终点连边,容量为k,费用0然后跑费用流即可#include #include #include #include #include #incl原创 2012-08-08 15:27:22 · 1789 阅读 · 0 评论 -
SGU 185 Two shortest 最短路+最小费用最大流 或者 最短路+最大流
真心服了此题了此题最贱之处在于内存只给了4M,也就是你只能开100W左右的int我开了各种short 最后发现 short会莫名其妙变成4字节的去然后就杯具了,MLE,开小了就会RE 这题明显不能用裸费用流去做了,裸费用流加的边太多了。任意两个点之间都来俩边的话一下子就给超内存了。所以只好用最短路+费用流的方法去做。不想写最短路+最大流的原因是 因为我的最大流模板太臃肿了原创 2012-08-09 02:09:51 · 1093 阅读 · 0 评论 -
POJ 2175 最小费用最大流之消圈 根据已有流量建立残留网络
这道题看似是建图十分简单,实则用裸的最小费用最大流必然会超时,用zkw费用流也会超时。所以必须看清题意,题目要求只要比当前方案好就行,没说要最好。那么根据定理,一个费用流是最小费用流的充要条件是这个费用流的残量网络没有负费用圈。对于这个定理,如果不明白可以画一画。那么对本题来讲,只需要消一次圈就可以找到一个比当前方案好的方案,当然前提是网络中有负圈得情况下。此时只需沿着负费用圈把各原创 2012-08-08 01:30:39 · 1557 阅读 · 0 评论 -
POJ 2135 最小费用最大流
这道题的题意就是,一个无向图,一个人从起点出发,到终点后往回走,但是走过的路不想走第二遍,也就是说必须存在两个路径从起点到终点,且这两个路径中不能有相同的边。那么建图就比较好想了,建立一个超级源点,一个超级汇点,因为是无向图么,所以源点到点1的流量为2,费用为0,点1到源点的流量为2,费用为0,同理点n和源点,然后其他的边流量就是1,费用就是边长了。注意都是加双向边。刚开始比较恶心原创 2012-03-05 14:27:47 · 748 阅读 · 0 评论 -
POJ 2455 Secret Milking Machine 二分+最大流 ISAP + GAP优化
题目要求如下一个无向图,有一些双向边。起点为1,目标点为n。要求必须有t条不同的路径。所谓的不同的路径,是一条边只能属于一个路径。现在求所有路径的最大边 最小的长度是多少。脑海中顿时闪过二分+最大流,找出模板秒之,因为还没到那种闭目写网络流的程度。 这次的模板是ISAP,我将一个大牛写的指针版本的邻接表改成了数组版本的。然后还有一个技巧是二分的上下界最好用所有边长度原创 2012-03-19 18:24:01 · 743 阅读 · 0 评论 -
POJ 1087 A Plug for UNIX 最大流
看完题以后就觉得是个最大流了。然后脑子不太清醒,想了一会儿才发现建图好简单啊,不过中间理解错题意了,题目中说有K种适配器,也就是说每种适配器的数量是无限个的,而我理解成了K个适配器了。。。 然后就WA了几次。。。建图: 加一个超级源点, 超级汇点。 源点与每个电器相连,容量为1,每个电器与其相应的插座相连,容量为1,插座之间能转化的就连一条无限容量的边,最后每个插座跟汇点相连,容量为这种原创 2012-04-16 17:29:38 · 1068 阅读 · 0 评论 -
HDU 3987 最小割模型
读完题后,就知道是最小割了,最小割=最大流,但是题目又说要最少边的最小割,输出边的个数这样建边得时候就要换种方式了,将边权w变为w *(E + 1) + 1,这时候求出的最大流实际上附带了一个信息,就是边的个数,最后的结果直接mod (E+1 )即可/*ID: CUGB-wwjPROG:LANG: C++*/#include #include #include原创 2012-04-10 22:34:18 · 1005 阅读 · 0 评论 -
POJ 3436 最大流
很羞愧啊 , 题都没看咋懂翻译见:http://hi.baidu.com/lewutian/blog/item/1b0709220085b7fed7cae28b.html/cmtid/87a1a0ad1aebe6064b36d60e题解参考了:http://zhyu.me/acm/poj-3436.html ,BUPT一位现役神牛的blog每台机器分输入输出,很显然直接拆点,每原创 2012-04-11 21:01:26 · 990 阅读 · 0 评论 -
HDU 3605 Escape 最大流
题目大意不再赘述,很容易看出来是最大流,只不过人比较多,有100W个,所以需要进行压缩,可以看到m是比较小的,非常容易就能联想到2进制,所以就压缩成了1024个节点,每个结点有一个值,代表有多少人是这个状态,然后建立超级源点, 超级汇点,源点与1024个结点连线,边权为结点的值,然后每个源点再与m个星球进行连线,边权为无限大,然后每个星球再与汇点进行连线,值为该星球的容纳量。/*原创 2012-04-13 10:21:14 · 1236 阅读 · 0 评论 -
POJ 1815 给定源汇的无向图点连通度 输出字典序最小的方案
无向图的点连通度转化为最大流来求解是个非常经典的模型了。当源与汇固定时构建网络流模型:若G为无向图:(1)原G图中的每个顶点V变成N网中的两个顶点V'和V'',顶点V'至V''有一条弧容量为1;(2)原图G中的每条边e=(U,V),在N网中有两条弧e'=(U'',V'),e''=(V'',U')与之对应,e'与e''容量均为无穷;(3)求最大流。原创 2012-07-09 21:21:05 · 1283 阅读 · 0 评论 -
网络流几题
只说建图 代码用的模板都一样,所以只发一份就好了POJ 1149 PIGS : 这题建图还真有点巧妙,首先建立超级源点和汇点,源点和每个猪圈的第一个顾客连边,容量为猪圈中的猪个数,如果一个人是多个猪圈的第一个顾客,那就把这些值加起来,再连边,当然用邻接表的话这就无所谓了。 刚开始我想的是把源点和每个猪圈连边来着,然后猪圈再和每个第一位顾客连边,后来一想,没必要,而且猪圈的个数又比较多,原创 2012-07-07 17:24:35 · 729 阅读 · 0 评论 -
HDU 2426 Interesting Housing Problem 最小费用最大流 or KM算法
这道题貌似是08年杭州网络赛的题目, 看完题后就发现是个最优匹配问题,用KM或者最小费用最大流做, 就找了个最小费用最大流的模板,改了一下,就能过了、建图还是比较好想的,建立一个超级源点,一个超级汇点,然后源点与学生连边,流量限制为1,费用为0,汇点与房间连边,流量限制为1, 费用为0, 然后学生与房间之间的边,流量限制是1,费用就是题目给的喜好值了, 注意,每次加边,都要加一个相应的反向边,原创 2011-11-13 15:39:48 · 1092 阅读 · 0 评论 -
POJ 2195 Going Home 最小费用最大流 or KM算法
题目大意是一张地图中,有n个人要走回n个房子里,然后人只能横着或竖着走一格,求他们回家的距离总和最短。这道题看起来是个最优匹配问题,用KM或者最小费用最大流做首先把每个人与每个房子之间的距离求出来然后就是套用模板了#include #include #include #include #include #include #include #include #in原创 2012-01-14 11:32:29 · 863 阅读 · 0 评论 -
ZOJ 2587 最小割的唯一性
题意还行,就是问最小割是不是唯一的。假设源点为s,汇点为t,最小割将点集分为两个点集S,T那么S的一种情况就是,从源点出发,dfs残留网络,沿着不满流的边走,能走到的所有点都属于S,全集减去S即为T。T的一种情况是,如果一个点沿着一些不满流的边能到达汇点,那么该点属于T。而本题要求的是唯一性,观察网络有这样一个特性,一个点如果既不能由S沿着不满流的边到达,也不能沿着一些不满流的边到原创 2012-08-04 10:55:35 · 3495 阅读 · 0 评论 -
POJ 3422 最小费用最大流 zkw或者普通版本
建图的话每个点拆成两个点u, u',连一条容量为1费用为金币数的边,再连一条容量为k,费用为0的边然后每个点和他右边或者下边的点连边 i'->j这样连然后源点连1点,右下角那个点去连汇点,容量都为k,费用为0普通写法#include #include #include #include #include #include #include #include原创 2012-08-08 13:01:05 · 1592 阅读 · 0 评论 -
最小费用最大流之 zkw费用流与普通费用流
http://www.artofproblemsolving.com/blog/54262这个是原作者的博文地址这是今天刚学的,不过理解上还是很浅薄。最近发现算法不能融会贯通还是因为自己太死板了。奉上一个基础版本的模板, POJ 2195 的代码。本模板是不能直接用于任何有负权的图,更不能用于有负圈的情况#include #include #include #incl原创 2012-08-08 01:38:44 · 10107 阅读 · 2 评论 -
POJ 2391 拆点+最大流+二分
题意就不再说了,主要是想说一下为啥要拆点POJ 2112跟本题很相似,也是二分,但它就没用拆点,本题就用了为啥呢? 因为POJ2112上建的图中是一个很明显的二分图,也就是左边的点绝对不会跟左边的点去连边的。而本题中就不一样了,任何点之间都可能有边。会出现这种情况,1->2->3,这是一条链,而1->2最短路为1,2->3为1,1->3为 2,此时如果我们限制最大距离为1的话,建的新图原创 2012-07-21 23:20:27 · 3981 阅读 · 1 评论 -
SGU 326 最大流
对于这种人与人之间互相打比赛的题,一般都是分成两种点,一种是人,一种是比赛。本题的意思是,有一只球队,编号为1,它的老板想让球队成为分区里边的第一或者并列第一。然后给出了当前所有球队已经赢的场数,还有剩下比赛的场数,但是剩下的比赛不光包括本分区的,还可能是跟别的分区打,这一点参考NBA。然后给出一个矩阵代表本分区内每个球队互相之间还剩余的比赛场数。那么对于1号球队,剩余的场次都赢才最有可能原创 2012-08-06 11:17:44 · 616 阅读 · 0 评论 -
POJ 2112 二分图多重匹配+二分+floyd
题目意思不在赘述二分图多重匹配一般都可以用网络流来做,只不过网络流的代码太长。具体看代码把#include #include #include #include #include #include #include #include #define MAXN 250#define MAXM 100005#define INF 1000000007#defi原创 2012-07-20 13:04:44 · 959 阅读 · 0 评论 -
ZOJ 2676 01分数规划 最小割
一个典型的01分数规划, 建图详见amber的论文 很详细了这种题最有可能出问题的是二分精度。尤其是之前做过的一个密度子图的题。所以我一般都二分完毕后再用low作为参数跑一遍#include #include #include #include #include #include #include #include #include #define eps 1e-5原创 2012-08-04 17:06:49 · 2116 阅读 · 2 评论