网络流
eIectron
优美的代码是成功AC的第一步。看着那么多博客不再更新,这就是我几年后的状态吗?要是走了就再也不回来了。
展开
-
POJ2195 Going Home(最小费用最大流模板题)(附用数组建图和用链式前向星建图代码)
Going HomeTime Limit:1000MS Memory Limit:65536KB 64bit IO Format:%lld & %lluSubmitStatusPracticePOJ 2195DescriptionOn a grid map there are n little men and n houses. In each unit t原创 2016-11-07 21:09:51 · 679 阅读 · 0 评论 -
POJ 2391 Ombrophobic Bovines(二分+网络流)
题意:给出n个牛棚,一开始每个牛棚有一些牛,但是每个牛棚只能住下规定数量的牛,每个牛棚之间有路可以互相到达,但是要花费一些时间,问是否有办法使得所有牛都有牛棚住,如果有办法,输出最小的时间花费。解法:因为是问时间花费,所以很容易就想到了二分上面。先跑一边floyd得到每个牛棚之间的花费时间,直接二分时间,不断建图即可。代码如下:#include#include#include#i原创 2017-09-13 13:19:06 · 192 阅读 · 0 评论 -
WOJ 124 Football Coach(网络流)
岛娘的网络流专题里面的一道题。武汉大学OJ上的一道题,典型的竞赛排名问题,要使得第N支队伍分数最高,问是否可能。解法:竞赛排名问题一种常见的方法就是把每个比赛当成一个点,然后连向他所关联的两个队伍。对于特定的题目,我们还需要挖掘他深层的条件。比如这道题,我们首先让第N支球队关联的比赛都让第N支球队赢。如果此时还有队伍比他分数高或者等于他的分数,那么直接输出NO即可。否则接下来我们把原创 2017-09-14 08:05:47 · 299 阅读 · 0 评论 -
SGU 326 Perspective(网络流)
岛娘网络流专题里面的一道题。又是个竞赛排名问题,跟上一篇WOJ的题目其实是一样的解法。只不过这道题要求第1支队伍是冠军,如果有队伍和第一支队伍同分的话也是可以的,这是和上一道题不同的地方。代码如下:#include#include#include#include#include#include#include#include#include#include#incl原创 2017-09-14 08:20:04 · 245 阅读 · 0 评论 -
2017 Bubble Cup X - Finals D. Exploration plan(最短路+二分+网络流)
比赛时候写不出来,因为发现费用流是无法求出每次的时间的,于是绝望中挂机。然后看了一发题解,大意就是:1.先每个点跑一次最短路,然后构出一个每个点到另外一个点的距离的图。2.然后二分时间,下界为0,上界为稍微大于所给时间的值。3.每次得到mid后建图,源点为0,N个队伍分别是1……N,源点向每个队伍连接一条流量为1的边,每个队伍所在的城市for一遍到其他城市的距离,如果小于等于mid原创 2017-09-04 10:06:21 · 452 阅读 · 0 评论 -
「网络流 24 题」餐巾计划
这道题目很关键的一点就是,要明白用的餐巾和洗的餐巾是两个系统。所以我们把每一天所用餐巾直接用一个源点和汇点连接。解决第一个系统。此时可能会洗餐巾,所以我们另起一个点,从源点每一天引出脏的餐巾,数目依然是当天所用的餐巾数量,然后从这个点连接到m天后的第一系统的点和n天后第一系统的点,费用分别为f和s,流量为无穷大。当天的餐巾就算不洗也可以留下来,所以我们还需要把这些餐巾连接起来,当天不洗的餐原创 2017-08-30 16:33:10 · 228 阅读 · 0 评论 -
NOI 2006 最大获利 (最大权闭合子图)
点击打开链接比较模版的最大权闭合子图。代码如下:#include#include#include#includeconst int maxn = 55005;const int maxm = 1e6;const int INF = 0x3f3f3f3f;using namespace std;inline int read(){ int x=0,t=1,c; wh原创 2017-09-02 11:10:00 · 228 阅读 · 0 评论 -
POJ 3155 Hard Life(最大密度子图)
详细解法参考胡伯涛的《最小割模型在信息学竞赛中的应用 》论文,下面做了一些注释,仅供参考。。。代码如下:#include#include#include#includeconst int maxn = 1500;const int maxm = 10000;const double eps = 1e-6;const int INF = 0x3f3f3f3f;using na原创 2017-09-03 16:23:10 · 206 阅读 · 0 评论 -
HDU 6214 Smallest Minimum Cut(求最小割的最少边数)
题目大意:给定一个图,从s到t求最小割,要求最小割的边数最少,输出最少的边数。解法:这其实就是一道原题,当时网络赛一搜就搜到了。方法1:先跑一遍最大流,满流的边必定是某个集合的最小割的边(很好理解,每次找增广路的时候,这条路被限制的最大流量就是这条路上流量最小的边,这条边必定对答案有贡献)。此时遍历所有正向边,满流的边使其流量为1,不满流的边重新设定其流量为INF,网络有许多错误的博客在这原创 2017-09-20 16:22:32 · 621 阅读 · 0 评论 -
Uvalive 7037 The Problem Needs 3D Arrays (最大密集子图)
题意:给出一些数字,找出逆序对。令 逆序对的个数/数字个数 最大。解法:我们先将逆序对用线标出来,然后就会发现这就是 边的数量 / 点的数量。这就是图的密度的定义。找最大密度则是用最大密集子图。求最大密集子图的方法见《最小割模型在信息学竞赛中的应用》。代码如下:#include#include#include#includeconst int maxn = 110;const原创 2017-10-07 11:00:31 · 305 阅读 · 0 评论 -
SPOJ Smart Network Administrator(二分+网络流)
岛娘网络流合集上的题目。题意:给出一些街道,一开始只有编号1的家庭有网络,其他家庭要想有网络都要从1号家庭拉网线(且只能从1号家庭拉)。现在要求k个家庭(已给出)有网络,而且还有一个规定就是每个街道的网线颜色必须不一样。问最少要多少种颜色的网线。解法:我们直接构图可以想到,直接用一个起点s到k个家庭连接一个流量为1的边,然后编号为1的家庭作为汇点t。给出的每条道路,如果每条道路流量为INF原创 2017-10-02 14:04:47 · 214 阅读 · 0 评论 -
POJ 2699 The Maximum Number of Strong Kings(枚举/二分+最大流)
岛娘网络流建模汇总里面的一道题。题意:每个玩家都会和另外所有玩家pk,给出每个玩家的分数(赢得pk则+1分),确保所有分数加起来是完全图的边数。定义strong king为:赢得了所有比自己分数高的玩家(最高分的玩家本身就是strong king)。问最多能有多少个strong king。解法:这种比赛的题目很常见的想法就是,把每个比赛当成一个点,然后这个点去连接另外两个玩家。那么建图就很原创 2017-10-02 18:49:11 · 264 阅读 · 0 评论 -
HDU 4280 Island Transport(最大流)
题意:给定一些小岛的坐标,要求从最东边到最西边。问最大流量是多少。解法:裸的最大流。本题确实卡了一下dinic,我用普通的读入挂跑了9s,用fread跑了7400ms。但是看了看别人isap啥都没加跑了5s。有的人用dinic超时是因为板子问题。有的板子里面bfs是从s开始到t,然后dfs也是s到t,这样是不够高效的。因为如果一个图从s开始有很多无用的边根本就到达不了t那种,就会使得d原创 2017-10-02 20:49:22 · 259 阅读 · 0 评论 -
POJ 1815 Friendship (最小点割集/最小割)
题意:给出每个朋友之间的联系表,如果a联系b,b联系c,那么a是可以联系c的。问最少要去掉多少个朋友才能使得s无法和t联系上。如果有一样的方案输出字典序最小的。解法:很像最小割有木有?但是这次不是边而是点,那么我们拆点不就好了。跑一次最大流发现一开始流量为f,那么我们从1到n枚举点,试着把第i个点删去看看流量是否有变化。如果有变化,说明第i个点在最小点割集里面。记录一下这个点,并且以后不再进入原创 2017-10-06 15:37:41 · 273 阅读 · 0 评论 -
Ural 1277 Cops and Thieves(最小点割集/最小割)
题意:一个团伙去偷一个美术馆,警察决定在路上堵截。警察人数为k,不能在贼窝和美术馆驻扎,只能在图上其他点驻扎,而且驻扎有一个最小人数要求,问警察能否完成任务。解法:又是最小点割集题目,每个点拆点即可,边权为给出的r[i],然后跑一遍最大流求最小割,比较一下是否小于等于k即可。坑点,如果美术馆和贼窝是同一伙人。。。代码如下:#include#include#include#in原创 2017-10-06 16:35:30 · 411 阅读 · 0 评论 -
UVA 10480 Sabotage (输出最小割所用边)
题意:给出一个图,要分割开1和2,每条边都有一个花费而且是无向的,问用上了哪些边,输出。在今年多校赛的时候写过一道输出最小割所用边的数量,但是今天遇到这个输出用了哪些边我就懵逼了。前几天还写过一道二分图的题目,判断一条边是否是必须存在的边,即是否删除这条边二分图的最大匹配数就变了。所以想在这题也用枚举的方法,但是一直wa。。。自己举了举反例发现不对。看了一下题解,原来这么简单。。。跑完一次最大原创 2017-10-25 19:28:49 · 308 阅读 · 0 评论 -
POJ 1149 PIGS(网络流经典建图题)
题意就是:给出m个猪圈,每个猪圈都有一定数量的猪,然后有n个顾客来买猪,他们每个都有一个最大的买猪数目。每次他们会按照顺序打开某些猪圈买猪,然后离开,此时卖家就在打开的猪圈里面重新分配猪,没有打开的猪圈不参与,然后全部猪圈都会关闭,一直循环。经典的网络流题目。每个猪圈剩下多少猪是由第一个进入这个猪圈买猪的人决定的,所以每个猪圈和第一个进入这个猪圈的买家连一条流量为无穷的边。后进来的买家则只能从原创 2017-08-23 14:38:03 · 334 阅读 · 0 评论 -
LOJ 「网络流 24 题」太空飞行计划(最大权闭合子图)
https://loj.ac/problem/6001原来还有这种操作。这种最大权闭合子图问题的套路就是:权值为正的,从源点向该点连一条流量为权值大小的边。权值为负的,从该点向汇点连一条流量为权值大小的边。原本的有关系的两个点之间连接一条流量为无穷大的边。最后得到的最大收益 = 权值为正的点的权值之和 - 跑一遍网络流得到的最小割。为什么会是这个结果呢?1.如果原创 2017-07-31 20:52:19 · 361 阅读 · 0 评论 -
POJ 2175 Evacuation Plan(网络流消负圈算法)
这是挑战上的一道题。一开始看到这道题,我是直接套最小费用流上去写的,然后无限T。。。后来看到,原来不是要找最优的情况,只需要输出一组答案比当前结果花费小即可。然后看书,才知道有消负圈算法这种东西。费用流中最优的网络是不存在负圈的,最最简单的理解就是,可以看到上面这个图,我们费用流是在最大流的前提下找最小费用,但是上面这个图肯定不是最大流,s到t还有1个流量单位。何为负圈原创 2017-08-05 11:11:33 · 940 阅读 · 0 评论 -
POJ3281Dinicing(网络流初步)
DiningTime Limit: 2000MS Memory Limit: 65536KTotal Submissions: 15644 Accepted: 7083DescriptionCows are such finicky eaters. Each cow has a preference for certa原创 2016-10-30 08:34:58 · 216 阅读 · 0 评论 -
POJ 1459 Power Network(网络流模板题)
这道题是一道网络流的模板题,难度在于,读懂题目。题目大意:你有发电站,中转站,用电用户。发电站可以发电,中转站不消耗电,用户要消耗一定的电量,问最终用户能使用的最大电量是多少。由于发电站发电有一个上限,所以我们用超级源点和发电站相连,边权为发电站能发电的上限。这个中转站是真的中转站,没有任何限制,如果有限制要拆点。用户消耗一定电量那么我们将用户和超级汇点相连,边权为用户最大消耗的电量。原创 2017-05-02 10:46:27 · 385 阅读 · 0 评论 -
CODE[VS] 1033 蚯蚓的游戏问题(最大费用最大流?)
http://codevs.cn/problem/1033/这是一道网络流的题目,还是很模版的,比较简单。我们看到了这一道题是很典型的点权,每个点有他的价值,然后题目也说了,每次蚯蚓走的时候不能和以前蚯蚓走过的路径重复。最终我们要求蚯蚓走完后所能得到的最大价值。我们很容易联想到这是一道网络流的题目,因为我们需要退流的思想,也就是要有反向边提供给我们后悔的机会。那么我们从网络流入手,考虑原创 2017-04-23 16:36:27 · 700 阅读 · 0 评论 -
POJ 1087 A Plug for UNIX(网络流模板题)
谜一样的题意的题目,我真的是!@#¥%……&*(。题意就是说,我有n个插头,m个电器,k个转换器和插头之间的组合(类似于交换机?),比如样例中的B X,就说明B可以把接受到的全部流量转移到X中,然后X A,说明X中的全部流量可以转移到A上。但是,我们只有n个插头,只有插头才可以接电源充电。m个电器也有相对应能用的插头,比如样例的phone是不能用B插头的,只能用C。然后,套用一下网络流EK原创 2017-03-07 17:38:04 · 243 阅读 · 0 评论 -
POJ 2135 Farm Tour(最小费用最大流模板题)
http://poj.org/problem?id=2135题意很简单,就是给出m条无向边,你要从1到n,然后从n回到1,要求走过的路不能再走,问这样走的最少时间是多少。一开始我很愚蠢的用正反网络流来跑,这样是错误的。因为这样就没有退流了。正解:设置一个超级源点0和一个超级汇点n+1,0到1的流量为2,花费为0,n+1到n的流量为2,花费为0.然后我们要求从0到n+1求最小费用,套板子原创 2017-07-13 20:09:58 · 375 阅读 · 0 评论 -
LOJ模板题 无源汇有上下界可行流
https://loj.ac/problem/115没有loj我都不知道有这种操作。如何求得一个无源汇的图是否可行呢,是一个网络流可以解决的问题。首先,我们知道每条边的起点u,终点v,下界low,上界up。最初始的图理应是由各条边的下界流量组成的。然后我们看一看每个点是否能做到流入量和流出量平衡。本来就平衡的话就不用管这个点了。如果不平衡,我们分情况讨论如果对于点p,流入量原创 2017-07-31 12:27:57 · 642 阅读 · 0 评论 -
LOJ 「SDOI2017」新生舞会(二分 + 分数规划+ 费用流)
点击打开链接看到这题,首先看到,一对一,那么感觉是二分图?看了看数据,挺像的。然后看到,原来是要一个C值最大。很典型的分数规划。我们转移一下就可以得到(a_1 - b_1 * c) + (a_2 - b_2 * c) + (a_3 - b_3 * c) + (a_4 - b_4 * c)....... = 0所以我们只要去枚举c,然后不断让上式向着零趋近,最后输出即可。当然,我原创 2017-08-01 19:37:07 · 503 阅读 · 0 评论 -
POJ 3686 The Windy's(最小费用最大流)
点击打开链接这是挑战上的一道题,不得不说十分的难懂。我看了好久才明白什么意思,当然好像跟挑战上的意思有点区别但是能A就行。首先,我们知道,这些玩具是可以交给各个工厂去加工的,一个工厂可以加工多个工厂,这里还没什么头绪。我们来看只有一个工厂的时候,加工n个玩具的总时间就会有T = Z1 + (Z1 + Z2) + .... + (Z1 + Z2 + .... + Zn)也就是T =原创 2017-08-07 10:35:59 · 212 阅读 · 0 评论 -
LOJ 6002「网络流 24 题」最小路径覆盖
最小路径覆盖的模板题。但是我是在hihocoder上才学到这个模版的,hihocoder上面有最小路径覆盖浅显易懂的解释,非常棒!代码如下:#include#include#include#include#include#include#include#include#include#includeusing namespace std;const int INF =原创 2017-08-16 19:23:56 · 288 阅读 · 0 评论 -
2016年青岛区域赛 Coding Contest(费用流)
题意:有n个区域,m条边连接这些区域,这些边是单向的。现在给出每个区域有多少个选手,多少个午餐。有的区域的选手没有午餐,所以他们只能去其他区域找午餐。在给定的单向边上面,有一个流量限制,不能通过超过这个数量的人。而且这些边上面有网线,只有一个人通过不会对网线有影响,但是有多于1的数量的人通过的时候,多出来的人通过这条边会有p几率毁坏这条网线。问选手怎样就餐使得毁坏网络的可能性最小。解法:题意十原创 2017-08-09 17:00:43 · 1317 阅读 · 0 评论 -
HDU 5889 Barricade(最短路建图跑网络流)
这是一道玄学题目。跑最短路很简单,跑网络流也是模版而已。但是我跑完最短路后从n开始向前bfs找满足dis[u] == dis[v] + 1的边,然后加入网络流的图里面。这样做会TLE。然后想了好久实在不知道搞什么鬼,看了看别人代码,别人是直接把所有边for一遍,只要满足dis[u] + 1 == dis[v]的,都加入网络流里面。这样当然也可以,我改了改,15ms就过了。但是这bfs也原创 2017-08-10 10:34:14 · 233 阅读 · 0 评论 -
POJ 3469 Dual Core CPU(最小割)
这是挑战上面的一道题目。一开始看到这题,想了半天,都觉得是一个最小费用最大流的题目。但是苦于纠结这个建图,按照我的想法建图会有负环导致死循环。想了一个上午,遂放弃,看到挑战上写着是——用最小的费用将对象划分成两个集合的问题,常常可以转换成最小割后顺利解决。没见过这种套路啊。。。挑战上面是采取,用流量代表费用的方法,然后求一次最小割即可。挑战上面的证明还是比较好理解的。特别是如何原创 2017-08-04 15:17:10 · 214 阅读 · 0 评论 -
HDU 4888 Redraw Beautiful Drawings(网络流 + 判环(不能用强联通))
题意和这个差不多http://blog.csdn.net/llzhh/article/details/77353532,只不过这道题改成棋盘上每个点的大小是0到k的。建图什么的都一样,但是我发现我用一开始强联通的写法是过不去的,因为判环的地方tarjan是找极大强联通分量,这并不是我想要的,比如样例中一行四列那个。但是在上一题竟然过了。而且上一题没有判断行和列的和都相等也过了,数据实在是太水了原创 2017-08-18 17:59:10 · 186 阅读 · 0 评论 -
HDU 4975 A simple Gaussian elimination problem.(网络流 + 强联通判环)
题意:给定一个n*m的棋盘,每一行的和给出,每一列的和给出,问是否存在这种摆法。每个位置放的数字都只能是0到9。解法:建图方面,源点和每一行连一条流量为当前行的和的边,每一列和汇点连一条流量为当前列的和的边,然后每一行和每一列都连上一条流量为9的边。跑一边dinic即可。这个问题卡的是如何判断有多种情况符合,我写了个dfs然后T了。判环的话,前段时间写的一道题找负环是用spfa,这道题的话其实原创 2017-08-18 09:11:33 · 187 阅读 · 0 评论 -
百度之星初赛B 度度熊的交易计划(最小费用可行流)
这道题说实话挺简单的,但是建图上太蠢了导致当时一直TLE,现在才补出来。当时用的是把一个点拆成三个点的做法,导致复杂度不知道扩大了多少倍。。。现在来总结一下,当时建图的方法按照样例来看是:现在看来这个图是完全可以优化的,因为源点连出去的边全都是流量为INF,费用为0的边,那么此时源点连出去的点是无用的,直接合并到源点即可。汇点也是。所以就可以得到下面这种建图:这样瞬原创 2017-08-14 16:38:42 · 1419 阅读 · 0 评论 -
LOJ 6045. 「雅礼集训 2017 Day8」价(最大闭合子图)
解法:一眼看去,真的太像最大权闭合子图了。但是分析一下发现,这道题的药材是没有费用的,最重要的是,题目要求所用药和药材的数量要一样。这可真的是难倒我了。看了一发别人的解法才发现太妙了。对于网络流二十四题中的《太空飞行计划》,这是一道最大权闭合子图的经典题,这道题中启用一个方案获利x元,但是要花y元买设备。我们可以这样看,方案启动越多越好,先把钱拿了,这时候去买设备,如果买设备的费用大于所给的启原创 2017-10-26 19:56:07 · 691 阅读 · 0 评论