网络流
浪子小黄人
这个作者很懒,什么都没留下…
展开
-
Destroying The Graph (poj 2125 最小点权覆盖)
题意:有一张有向图n个点m有向边,现在每次删除一个点的所有入边费用为W+,或者删除一个点的所有的出边费用为W-,问删除所有的边最小费用是多少。思路:最小点权覆盖问题,具体贴上《最小割模型在信息学竞赛中的应用》中的阐述:回顾与此模型相关的模型。简化权的条件后,可以借鉴的是二分图匹配的大流解法。 它加入了额外的源s和汇t,将匹配以一条条s->u->v->t形式的流路径“串联”起来。匹配的 限制是在点上,恰当地利用了流的容量限制。而点覆盖集的限制在边上,小割是大流的对偶问题,对偶往往是将问题的性质从点转边,从原创 2015-09-17 21:07:29 · 600 阅读 · 0 评论 -
Unique Attack (zoj 2587 判定最小割是否唯一)
题意:判断最小割是否唯一。参考点击打开链接原创 2015-07-27 09:32:36 · 707 阅读 · 1 评论 -
The Great Wall I (zoj 3475 最小割最大流)
题意:n*m的地图,现在上面有X国家和一些联盟国要共同抵御E国,X国要建长城,有一些国家联盟进来并出一定费用,每条边都有一个建造费用,告诉每个国家的坐标和参加联盟的国家出的费用,问X国怎样建可以使费用最小,输出最小费用。思路:这一类题目在图中把点分成两部分可以用最小割求解,图中的一条边就表示以改变为公共边的两个点之间有弧,添加源点和汇点,枚举哪些国家在长城内,将源点与这些国家连边,E和边界与汇点连边。这样求一遍最大流,选择了某条边为割边就表示方格中两个格子间的那条围墙被选择了。原创 2015-07-12 19:44:52 · 986 阅读 · 0 评论 -
River Problem (hdu 3947 流量等式建图 难题 最小费用最大流)
题意:治理河水污染问题,有n个点,n-1条有向边表示河流,每条河流都会汇聚到1,现在告诉每条河流的污染值w,另外有m种药水,每种药水可以治理起点为u终点为v的河水段,可以使该河段的污染值减少1,该种药水最多可以用L次,花费为c,问把污染治理完最小需要的花费是多少。原创 2015-07-11 23:24:08 · 1311 阅读 · 0 评论 -
Matrix (hdu 2686 最大费用最大流)
题意:给出一个n*n的矩阵,每个点上都有一个值,现在从左上角沿着一条路径走到右下脚(只能向右或者向下),然后再从右下角回到左上角(只能向左或者向上),在这个过程中每个点只允许走一次,问路径上的权值之和最大为多少?思路:这里用到费用流求解,首先添加一个超级源点s=0和超级汇点t=n*n+1,然后对每个点拆点, i 向 i` 连边,容量为1,花费为该点的权值mp[i][j],然后s与 1` 连边,容量为2,花费为0,n*n向t连边,容量为2,花费为0,最后矩阵中的点之间连边,容量为1,花费为0。最后答案为co原创 2015-07-05 14:14:12 · 617 阅读 · 0 评论 -
Thieves (hdu 3491 拆点 最小割)
题意:n个点m条边的无向图,告诉起点S和终点H,现在知道起点有小偷要去H偷东西,为了抓获小偷告诉每个点要安排的警察数量,现在问在哪些点安排警察可以使警察数量最少,求出最小数量。思路: 关键要理解最小割的建图思想,因为点上有权值,所以拆点,i->i+n建边,容量为点上权值,这样就能保证这个点可能被选择,然后点与点之间的边建图时容量为INF,保证它不被割到(因为我们要选的只是点上的权值),然后起点S->S+n,终点H->H+n建边容量为INF,起点和终点不能方放警察。原创 2015-07-25 10:45:48 · 770 阅读 · 0 评论 -
Transportation (hdu 3667 最小费用最大流+拆边)
题意:给出一个有向图n个点m条有向边,把k单位的货物从1运到n,每条边有一个容量上限c和花费系数a,每一单位的货物从该边过要花费a,问把这k货物运到n的最小花费是多少。思路:费用与流量平方成正比的最小流。容量c为整数,并且每条弧还有一个费用系数a,表示该弧流量为x时费用为ax^2,如何求最小费用最大流?用拆边法,这题边的容量c最大只有5,所以可以拆边,一条边拆成c条边,每条容量1,对应相应的代价为a * (i^2 - (i - 1)^2),最后来一遍费用流即可。原创 2015-07-05 19:26:52 · 644 阅读 · 0 评论 -
Being a Hero (hdu 3251 最小割 好题)
题意:n个点m条边的有向图,每条边有破坏话花费,现在国王在城市1,要分配给英雄一些城市,分配的原则是:只能在规定的f个城市中选若干个,这f个城市每个都有一个获利,被选择的城市要与国王所在的城市1隔离,所以选定后要花费一些费用来破坏边。问最后获利的最大值是多少,并且输出要破坏的边的序号。思路:这个题拿到手之后很久没有思路,因为图上既有获利又有花费,不知道怎么建图,无奈只好求助网上神牛。添加汇点T,原图上的单向边依次建边,容量为花费,允许选择的f个点向汇点T连边,容量为点上权值。跑一遍最小割得到花费值cost原创 2015-07-26 16:51:40 · 1356 阅读 · 0 评论 -
The Exchange of Items (141 - ZOJ Monthly, July 2015 - E 最小费用最大流)
题意:现在有N个物品,进行物物交换,告诉每个物品 i 的初始时的个数A[i]和最终想得到的个数B[i],M种交换方式,问为了达到目的最少的交换次数是多少。思路:最近在做最小割,看到什么都想往最小割上套敲打发现不行,恩,好像费用流可以搞。添加源点s和汇点t,如果A[i]>B[i],也就是物品i的初始个数大于最终个数,那么我们从源点向i连边,容量为A[i]-B[i],费用为0,同样如果B[i]>A[i],i向汇点连边,容量为B[i]-A[i],费用为0,另外M种交换方式建双向边,容量为INF(因为理论上可以进原创 2015-07-26 15:23:47 · 1376 阅读 · 6 评论 -
Pleasant sheep and big big wolf (hdu 3046 最小割)
题意:一个矩阵,1表示羊,2表示狼,然后让把羊和狼隔开,问需要最小的栅栏数。思路:要把羊和狼隔开,就是去最小割把他们分开,每个格子和周围四个格子建流量为1的边,s向狼建INF的边,羊向t建INF的边。原创 2015-07-12 09:25:37 · 946 阅读 · 0 评论 -
There is a war (hdu 2435 最小割+枚举)
题意:n个国家,m条有向边,国家1要去攻打国家n,n想切断1到n的道路来防御,切断每条道路有一定费用,国家1有一个NB魔法,可以建一条新边或者加固一条已有的边,这条边不能被n破坏,现在求 最大化n国花费之和的最小值。思路:可知就是求最小割边集,先建图,跑一遍最大流得ans,然后从S集到T集枚举割边使容量为INF,在残留网络中再跑网络流并记录最大值Max,那么最后答案就是ans+Max。在枚举的时候也可以直接重新建图,这样应该好理解一些。原创 2015-08-25 21:31:14 · 630 阅读 · 0 评论 -
Crazy Circuits (hdu 3157 流量有上下限的最小流)
题意:有两个正负极n个节点和m个元件,每个元件告诉端点是接在哪个节点上的,并且每个元件有工作的最小电流限制,问使所有元件工作的满足条件的最小电流是多少。思路:题目中已经有了源点S和汇点T,再添加附加源点SS和汇点TT,原图中的边的容量为INF(因为没有上限),若in[i]>0则SS向i连边容量为in[i],若in[i]<0则i向TT连边容量为-in[i],跑一次最大流,然后T向S连容量为INF的边,再跑一次最大流,判断SS的出边是否满流,若不满流则无解,否则有解输出边(T,S)的流量。另外这类题看这里详原创 2015-08-26 16:58:15 · 1188 阅读 · 0 评论 -
Crimewave (Uva 563 最大流拆点)
题意:b个银行被抢,罪犯制定逃跑路线,要求路上上的点和边不重合,问是否存在可行方案。图的边界就是表示逃出去了。思路:拆点,容量为1,每个点向四周相邻的点连边,容量为1,判断是否满流。原创 2015-08-01 09:28:42 · 707 阅读 · 0 评论 -
Friendship (poj 1815 最小点割集+枚举)
题意:给出N个人之间的通讯关系,给出S和T,问切断S到T的联系最小要删去的点是多少,输出最小字典序解。思路:拆点,从1~N枚举删掉i后看最大流是否减少,若减少则i属于最小点割集。原创 2015-09-15 16:10:59 · 693 阅读 · 1 评论 -
The Bonus Salary! (poj 3762 离散化+最小费用流)
题意:有n个任务要在k天时间内选部分完成,每个任务在每天有一个规定的时间,必须要在这个时间内做这个任务,完成一个任务会得到相应的分数,问能得到的最大分数是多少。思路:离散化+最小费用流,这一题和poj3680是一样的,先对时间离散化,然后添加源点S和汇点T,1->2,2->3,3->4.......T-1->T这样连边,容量为k,费用为0,对于每个任务起始时间u->v连边,容量为1,费用为-w。原创 2015-09-14 15:19:40 · 513 阅读 · 0 评论 -
The Windy's (poj 3686 最小费用最大流 建图经典)
题意:n个订单m个工作车间,每个订单只能在同一个车间全部完成,每个订单在每个车间完成的费用以矩阵给出,问完成所有订单的最低平均费用为多少。这题建图确实想不出来,看了别人的讲解,感觉太巧了!http://blog.csdn.net/weiguang_123/article/details/7881799原创 2015-09-14 12:58:38 · 526 阅读 · 0 评论 -
Evacuation Plan (poj 2175 SPFA费用流消圈)
题意:n个办公楼和m个防空洞,每个大楼里有一定人数,每个防空洞有一个最大容量,现在告诉每个大楼的人数和每个防空洞的容量,还告诉一个撤离方案,问是否是最优方案,否则输出更优方案。思路:很容易想到是最小费用流,但是会超时。这是一个费用流消圈的问题,有这样一个定理:一个费用流是最小费用流的充要条件是这个费用流的残留网络中没有负费用圈。负圈是指费用总和是负数,且每条边的剩余流量大于0的圈。我们先根据已知条件构造出残留网络,在残留网络中从汇点出发用spfa找负圈。我是按照原图建边的,网上好多是简化了的。原创 2015-09-08 15:07:12 · 439 阅读 · 0 评论 -
Intervals (poj 3680 离散化+最小费用最大流)
题意:有N个整数区间,每个区间有一个权值,从中取一些区间,使得任意整数点的重叠数不大于K,并且这些区间的总权值最大。思路:首先区间比较大,线段比较少,考虑到离散化操作。建图比较巧妙,S->1,1->2,2->3......T-1->T这样连边,容量为k,费用为0,然后对于每条线段u->v连边,费用为-w,容量为1.原创 2015-09-11 17:27:03 · 611 阅读 · 0 评论 -
MZL's City (hdu 5352 最小费用流 ||二分图匹配)
题意:有n个城市m年前被地震摧毁,道路也被破坏了,m年间进行了一些城市和道路的重建,有三种操作:(1)1 u表示重建u或者与u直接相连或间接相连的城市;(2)2 u v表示在城市u和v之间建一条道路;(3)3表示发生地震破坏了哪些道路。每年最多重建K个城市,城市一旦重建就不会再被地震摧毁,问这m年后总共重建的城市数目最大为多少,并按照字典序输出每年建造的城市数目。思路:起初只知道要倒着来,具体怎么弄没想出来,看了题解是用二分图匹配,这是我第一次遇到把操作当做节点的,太弱,还是题目做少了=-=。但感原创 2015-08-07 10:34:40 · 887 阅读 · 0 评论 -
Minimum Cost (poj 2516 求K次最小费用流)
题意:有n个客户,m个供应商,k种商品,给出n个客户对这k种商品的需求 和 这k种商品m个供应商的供给量,以及每种商品ki从供应商j运到客户i的费用,求最小费用。思路:如果只有一种商品那就是最普通的费用流问题了,现在变成了k种商品,那我们就求k次费用流相加就可以了。原创 2015-09-08 16:27:03 · 639 阅读 · 0 评论 -
Firing (poj 2987 最大权闭合图)
题意:公司有n个员工和m个从属关系,现在要辞退一些人,每辞退一个人 i 会到一个价值wi(正或者负),辞退一个人也要连同他的下属一起辞退,问能得到的最大收益是多少且最少的辞退人数是多少。思路:最大权闭合图,关键是求最少的辞退人数,这里就为最小割的取点数,具体证明看这位大神吧点击打开链接另外注意要用long long原创 2015-09-07 20:24:54 · 672 阅读 · 0 评论 -
Tricks Device (hdu 5294 最短路+最大流)
题意:n个点m条无向边,假设从起点0到终点n-1的最短路距离为dist,求最少删除多少条边使得图中不再存在最短路,最多删除多少条边使得图中仍然存在最短路。思路:先用spfa求一次最短路,开一个road数组,road[i]表示从起点走到i点最短路径所经过的最少边数,然后第二问就是m-road[n-1];再根据最短路的dist数组判断哪些边是最短路上的,用它们重新构图,跑一遍网络流求最小割。比赛的时候没有在最短路上建边,直接用的原图,果断TLE,又坑了队友=-=原创 2015-07-21 19:07:32 · 765 阅读 · 1 评论 -
Random Maze (hdu 4067 最小费用流 好题 贪心思想建图)
最小费用最大流,重在建图,好题!原创 2015-07-11 08:57:46 · 819 阅读 · 0 评论 -
E. Soldier and Traveling (CF 304 div2) 最大流
题意:给一个无向图,每个点有一个权,这是初态,给出目标态,问能否达到目标态,只能向相邻的点传递权。思路:网络流,s->a[i]->b[i]->t建图。原创 2015-05-23 20:35:34 · 923 阅读 · 0 评论 -
Dual Core CPU (poj 3469 最小割求解)
题意:现在有n个模块,两个CPU A和B,每个模块要么在A上运行,要么在B上运行,给出每个模块在A和B机器上运行所需要的费用。接着m行,每行 a,b,w三个数字。表示如果a模块和b模块不在同一个机器上运行的话,需要额外花费w来共享数据。现在要求出运行所有任务最小的花费是多少。思路:将两个CPU视为源点和汇点,对第i个模块在每个CPU中的耗费Ai和Bi,从源点向顶点i连接一条容量为Ai的弧,从顶点i向汇点连接一条容量为Bi的弧;对于a模块和b模块在不同CPU中运行造成的耗费w,从顶点a向b连容量为w的双向边原创 2015-02-24 13:00:46 · 1113 阅读 · 0 评论 -
Sightseeing tour (poj 1637 混合图的欧拉回路)
题意:求混合图是否有欧拉回路。思路:首先是基图联通(不考虑度为0的点),然后需要借助网络流来判断。 首先给原图中的无向边随便指定一个方向(初始定向),将原图改为有向图G’,然后的任务就是改变G'中某些边得方向(当然是无向边转化来的,原 有向边不变)使其满足每个点的入度等于出度。 设d[i]为G'中(点i的出度-点i的入度)。可知,在改变G'中边的方向时,任何点的d值的奇偶性都不会变(设将边<i,j>改为<j,i>,则i的入度加1出度减1,j的入度减1出度加1,两者之差加2或减2,奇偶性不变)!而最终要原创 2015-02-23 18:49:10 · 681 阅读 · 0 评论 -
Ombrophobic Bovines (poj 2391 网络流+二分+Floyd)
题意:农场有F块草地,奶牛们在草地上吃草。这些草地间有P条路相连,这些路足够宽,再多的牛也能在路上行走。有些草地上有避雨点,奶牛在避雨点避雨。避雨点的容量是有限的。奶牛要在下雨前全部到达某个避雨点,计算报警至少要提前多少时间拉响,以保证所有的奶牛能够到达一个避雨点。思路:先预处理floyd求出各点之间的最短路,拆点,将每个点拆成两个,注意第i个点连第i+F个点时保证单向,防止回流,权值为inf,另外是无向边,要建两条边(这个wa了我二十多发),网络流+二分,二分时间来判断两个地方能不能连边,求最大流,如果原创 2015-02-23 18:30:44 · 520 阅读 · 0 评论 -
Optimal Milking (poj 2112 网络流+二分+floyd)
题意:农场有K个挤奶器和C头奶牛,每个挤奶器和奶牛都在不同的位置,挤奶器编号1~K,奶牛编号K+1~K+C,邻接矩阵给出它们之间的距离,每台挤奶器每天最多能为M头牛挤奶。寻找一个方案,安排每头奶牛到某个挤奶器挤奶,并使得C头奶牛需要走的路程中的最大路程最小。思路:先用floyd算法求出能到达的任意两点之间的最短距离,然后dinic算法求最大流,搜索最大距离的最小值采用二分法。原创 2015-02-19 19:40:05 · 613 阅读 · 0 评论 -
PIGS (poj 1149 最大流)
题意:m个猪圈n个顾客,告诉每个猪圈里猪的数量和顾客的需求量以及告诉顾客会到哪个猪圈买猪,问最多能卖出多少猪。思路:本题的关键在于如何构造一个容量网络。(1)将顾客看作除源点和汇点以外的点,并且另设两个节点作源点和汇点。(2)源点和每一个猪圈的第一个顾客连边,权是开始时猪圈中猪的数量。(3)若源点和某个节点之间有重边,则将权合并(因此源点流出的流量就是所有的猪圈能提供的猪的数量)(4)顾客j紧跟在顾客i之后打开某个猪圈,则<i,j>的权是无穷大;这是因为,如果顾客j紧跟在i之后打开某个猪圈,那么迈原创 2015-02-19 17:22:58 · 612 阅读 · 0 评论 -
Food (hdu 4292 网络流sap模板题)
题意:有N个人,准备了F种食物和D种饮料,每个人都有喜欢的食物和饮料,这些食物和饮料最多能满足多少人。思路:网络流,添加超级源点和食物相连,边权为该食物的数量,添加超级汇点和饮料相连,边权为该种饮料的数量,将人拆点,边权为1,建图,s->食物->人->人->饮料->e。dinic超时,用sap。原创 2015-02-17 16:53:18 · 1068 阅读 · 0 评论 -
poj 2195//hdu 1533 Going Home 最小费用流(spfa)
题意:n*m的图上有若干个人‘m’和房屋‘H’,人每走一步消耗一块钱,现在要让所有的人都进到房子去,一人一间房,问最小的费用是多少。思路:最小费用流,添加超级源点和超级汇点建图,我用的spfa版费用流算法。原创 2015-02-09 16:38:57 · 860 阅读 · 0 评论 -
网络流之 最短增广路算法模板(SAP)
数据输入格式:首先输入顶点个数n和弧数m,然后输入每条弧的数据。规定源点为顶点0,汇点为顶点n-1.每条弧的数据格式为:u,v,w,分别表示这条弧的起点,终点,容量。顶点序号从0开始。代码:#include #include #include #include #include #include #include #include #include #include #原创 2014-10-24 17:46:23 · 1479 阅读 · 0 评论 -
Power Network (poj 1459 网络流)
Language:DefaultPower NetworkTime Limit: 2000MS Memory Limit: 32768KTotal Submissions: 23407 Accepted: 12267DescriptionA power network consists of nodes (po原创 2014-10-24 20:44:02 · 1138 阅读 · 0 评论 -
Drainage Ditches (poj 1273 && hdu 1532 网络流之Ford-Fulkerson)
题意:N条边,M个点,求最大流。原创 2015-04-01 22:08:08 · 600 阅读 · 0 评论 -
Leapin' Lizards (hdu 2732 最大流)
题意:给一个n行的图(不知道有多少列),每个点的数字表示能承受的最大跳跃次数,接下来又是n行,‘L’表示蜥蜴所在地方,给出蜥蜴能跳跃的最大距离d,每次蜥蜴跳离的那根柱子的承受力会减一,若为零了该点的柱子会塌,现在问最少有多少蜥蜴跳不出去。思路:首先将有柱子的点拆成两个,权为承受力,增加超级源点和汇点,‘L’和源点相连,权为1,能一次跳出去的柱子和汇点相连,权为INF,然后能相互到达的柱子之间连边,权为INF。这一题要注意蜥蜴能跳的不只是四个方向,360度任何方向都行,只要两个柱子之间的距离小于d。最后注意原创 2015-04-18 21:50:37 · 1025 阅读 · 0 评论 -
Kakuro Extension (hdu 3338 最大流 建图难)
题意:n*m的黑白格子,填数字,使白色区域的行列值的和等于有值得黑色区域的相对应的值。思路:网络流,添加超级源点和汇点,源点和每行中有和值的点相连,汇点和每列中有和值的点相连,每行中有和值的点和该行中对应空白格相连,权值为8,同样每列中有和值的点和该列中对应的空白格相连,权值为8。因为数组开大了,memset时超时了,T了两天,简直了。后来看到网上的建图方法,是把一整行当作一个点,这样建图简单一点,比我的代码要快。原创 2015-04-19 22:36:43 · 968 阅读 · 0 评论 -
Going Home (hdu 1533 最小费用流)
题意:二维地图上有人和房子,每个人要到一个房子里去,一个房子只能容纳一个人,每个人的费用为走的距离。求最小费用。原创 2015-05-14 21:37:57 · 708 阅读 · 0 评论 -
Base Station (hdu 3879 最大权闭合图)
题意:有n个地方可供建造基站,建造每个基站有一个成本p,有m个用户群,第i个用户群的用户会使用基站ai和bi进行通讯,公司获利ci,公司有选择的修建基站,问最大的净利润为多少。净利润=总收益-总成本。思路:首先分析题目中的决策因素。在满足了第i个用户群后,便可以得到收益,然而满足第 个用户群需要有必要条件:建立中转站ai和中转站bi,同时要花去相应费用。留心这个所谓 的必要条件,便可联想到闭合图的性质。分析后发现,本题就是最大权闭合图的一个特例。把它抽象成这样一个有向图模型:每个用户群i作为一个结点分别向原创 2015-05-02 10:18:48 · 949 阅读 · 0 评论 -
HS BDC (hdu 3472 混合图的欧拉回路)
题意:给出n个单词,问这些单词能否首尾相连组成一个整体,其中部分单词可以翻转。思路:将每个单词的首尾字母看成结点,每个单词看成一条边,可以看出这是一张混合图,要求判断是否有欧拉路。使用判断欧来回路的方法,如果存在欧拉回路那么就一定存在欧拉路了;否则如果有且仅有两个点的(出度-入度)是奇数,那么给这两个点加边,判断是否存在欧拉回路。注意这一题要判断图的连通性。原创 2015-05-12 23:12:48 · 714 阅读 · 0 评论 -
Destroying the bus stations (hdu 2485 网络流+最短路)
题意:n个点m条边的图,求至少摧毁多少点可以使得从1到n的路径大于k。思路:先预处理求出最短路,还要拆点,i与i‘之间连一条权为1的边,若边(u,v)满足dist1[u]+dist1[v]<k则添加 u‘ 到 v 的边,权为INF,求一次最大流即可。原创 2015-04-28 23:10:03 · 1081 阅读 · 0 评论