
网络流
风中之神111
我亦飘零久
展开
-
最大流
1. 什么是最大流问题?首先要先清楚最大流的含义,就是说从源点到经过的所有路径的最终到达汇点的所有流量和。流网络G=(V,E)是一个有向图,其中每条边(u,v)∈E均有一个非负容量c(u,v)>=0。如果(u,v)不属于E,则假定c(u,v)=0。流网络中有两个特别的顶点:源点s和汇点t。下图展示了一个流网络的实例(其中斜线左边的数字表示实际边上的流,右边的数字表示边的最大容量):2...原创 2019-05-25 22:06:06 · 5405 阅读 · 0 评论 -
Poj3436——ACM Computer Factory(最大流)
题意:流水线上有N台机器装电脑,电脑有P个部件组成,每台机器有三个参数,产量,输入规格,输出规格;输入规格中0表示改部件不能有,1表示必须有,2无所谓;输出规格中0表示该部件没有,1表示有。问如何安排流水线使电脑产量最高。思路:每个机器都是一个结点,点上有容量。拆点,中间连一条边,容量设为产量。然后根据输入规格和输出规格建立网络。跑最大流,有流量的边就是方案中包含的边。#include &...原创 2019-07-23 18:26:30 · 193 阅读 · 0 评论 -
POJ 3281 Dining(网络流经典构图)
题意:农夫John有N头牛,每头牛都有自己喜欢的食物和水的种类,一共有F种食物和D种水,现在让你来进行分配,每种食物或水只能分配给一头牛,并且每头牛只能得到一种食物和一种水,问最多能使几头牛同时享用到自己喜欢的食物和饮料。(1 <= N <= 100, 1 <= F <= 100, 1 <= D <= 100)思路:题第一反应很容易往二分图匹配想,但是因为...转载 2019-07-23 20:56:33 · 161 阅读 · 0 评论 -
POJ2516 Minimum Cost (费用流)
题意:摘自:https://blog.youkuaiyun.com/qq_30974369/article/details/76648579一行是三个数字:N,M,K分别表示有N个商店,M个供货商,K中货物接下来是N行,每行K个整数对于第i行第j列,表示的是第i个商店对于货物j的需求再接着,M行,每行K个整数对于第i行第j列,表示的是第i个供货商对于货物j的存货接下来有K个N*M的矩形第X个...原创 2019-07-24 12:51:23 · 274 阅读 · 0 评论 -
Hdu4280 Island Transport(最大流卡时间)
题意:给出一些点从最西边的点经过网络到最东边的点,问最大流量(无向图)思路:根据坐标找出最西边的点(源点)和最东边的点(汇点)。建图也很直接,无向图网络流,建边要正反向都要赋予流量值;如果有向图则正向流量值,反向为0。卡时间。Dinic用STL不行,都换成了数组。另外ISAP也行。// 抛弃STL的Dinic , 7800ms#pragma comment(linker,"/ST...原创 2019-07-24 20:15:12 · 168 阅读 · 0 评论 -
Hdu4292_Food(最大流)
题意:有F种食物和D种饮料,每种食物或饮料数量有限,且每个人只享用一种食物和一种饮料。现在有n个顾客,每个人都有自己喜欢的食物和饮料,问最多能使几个人同时享用到自己喜欢的食物和饮料。思路:每个人只用一份food和drink就行了,所以把人拆点,中间连一条容量为1的边。源点——>food——>人——>人——>drink——>汇点源点——>food, 容量...原创 2019-07-24 20:26:13 · 202 阅读 · 0 评论 -
Hdu4289_Control(最大流)
题意:有N个城市,现在城市S出现了一伙歹徒,他们想运送一些炸弹到D城市,不过警方已经得到了线报知道他们的事情,不过警察不知道他们所在的具体位置,所以只能采取封锁城市的办法来阻断暴徒,封锁不同的城市代价不同,问阻断暴徒从S城市到达D城市的最小需要花费的代价。思路:城市有代价,将城市拆点,连一条边,容量为代价。不同城市之间的容量为INF。跑最大流。#include <cstdio>...原创 2019-07-25 13:56:25 · 160 阅读 · 0 评论 -
Uva10480_Sabotage(最小割)
题意:给定n和m,n表示点的数量,m表示边的数量。再给m条边(u,v,w)。w表示割该边的花费。注意是无向图,反向边的容量与正向边一致。将结点1看作源点,结点2看作汇点,求一组最小割边集。思路:跑最大流。跑完的残余网络中,将源点S能到达的点看作S集,其他点看作T集。如果边的一个点属于S集,另一个点属于T集,那么该边属于最小割边集。#include <cstdio>#incl...原创 2019-07-25 13:59:39 · 187 阅读 · 0 评论 -
Hdu2732_Leapin' Lizards(最大流)
题意:摘自:https://www.cnblogs.com/DOLFAMINGO/p/8144939.html在一个n*m的地图上, 有一些高度不一柱子, 又有一些青蛙站在柱子上,且一根柱子最多只能站一只青蛙。青蛙一次最多可跳跃d个距离,即:abs(x-xx)+abs(y-yy)<=d,且每跳一次,青蛙原来站着的柱子的高度会下降一个单位,当柱子的高度为0时,就无效了。当青蛙跳出界时,才算...原创 2019-07-25 17:00:51 · 212 阅读 · 0 评论 -
Hdu3338_Kakuro Extension(最大流)
题意:n*m的黑白格子,填数字,使白色区域的行列值的和等于有值的黑色区域的相对应的值。思路:每个白格子数字可以填1-9,暗示了流量必须>=1。所以预先设流量为1,相当于容量减1,原先的容量为9,现在为8。最大流,建图轮廓为 S ——》行的和 ——》白格子——》列的和 ——》T.由于行的和——》白格子,白格子——》列的和,的容量都减1,所以S——》行的和,列的和——》T的容量也要相应...原创 2019-07-25 21:33:37 · 156 阅读 · 0 评论 -
Hdu3605 Escape (多重匹配or最大流+状态压缩)
题意:有N个人,M个星球,有一个N*M的矩阵,表示某个人是否可以去某个星球, 每个星球有最大容纳人数。问这些人能不能全安排到这些星球上?思路:二分图的多重匹配最大流。因为n很大,所以直接建图会内存超限,考虑M的上限很小(10),对所有人而言,去星球的状态最多2^M = 1<<M种,将相同的状态合并。多重匹配#include <cstdio>#include...原创 2019-07-26 11:53:52 · 179 阅读 · 0 评论 -
Uva12433租车——最小费用最大流
题意:思路:建图。给每天建立两个节点Di,Si,分别表示租车公司内的车,当天归还了的车。源点S到第一天D1连接的是汽车公司的信息,Di->Dj的容量INF,花费为0,表示租车公司里的车可以不租出去,存在公司里。Si->Dj表示归还的车可以在第(i + di + 1)天被再次租出去。每个Di->T连有一条当前的计划租出数。最小费用最大流,跑完后,检查Di->T的边...原创 2019-07-04 21:57:08 · 860 阅读 · 0 评论 -
Uva12264Risk游戏——最大流+二分
题意:给n个点的无权无向图(n<=100),每个点有一个非负数ai。若ai==0则此点归敌方所有,若ai>0则此点归你且上面有ai个属于你的士兵。保证至少有一个属于你的点与敌方的点相邻。你可以让你的每个士兵最多移动一次,每次可以待在原地或者去到相邻的属于你的领地,但每个点至少要留1各士兵,使得最薄弱的关口尽量坚固。关口是指与敌方点相邻的点,薄弱与坚固分别指兵少与兵多。思路:讲的很...转载 2019-06-18 15:33:53 · 348 阅读 · 0 评论 -
uva1660电视网络-最小割最大流
题意:求无向图的点连通度(最少删除几个点,使得图不连通)思路:求最小割(最大流)。每个点只能被用一次,否则可能有多条增广路公用同一个点,而其实删掉这一个点就足够破坏这些路了。点只能用一次,想到拆点法。然后最大流算法就行了。写了几个不同算法熟悉一下,结果ISAP的时候卡住了,怎么答案老不对,原来是由于用了拆点法n变成了2n。#include <cstdio>#include ...原创 2019-06-11 19:03:34 · 239 阅读 · 0 评论 -
Uva1627团队分组(二分图+DP)
题意:思路:预备知识:二分图。只要A,B不是互相认识,那么肯定在不同的大组里。先根据不认识的关系建立图(只要a,b不是互相认识他们之间就有一条边),这个图可以有多个连通分量。对于每个连通分量,如果是二分图,说明这个连通分量可以分成两个小组(1组和2组),且这两个小组最终会进入不同的大组(A组和B组)。如果不是二分图,说明总要有不认识的人在一个小组,存在矛盾,无解。接下来,需要在...原创 2019-03-20 20:29:20 · 388 阅读 · 0 评论 -
二分图
定义二分图又称作二部图,是图论中的一种特殊模型。 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(i in A,j in B),则称图G为一个二分图。无向图G为二分图的充分必要条件是,G至少有两个顶点,且其所有回路的长度均为偶数。易知:任何无回路的的图均是二分图判定判断二分图的常见...原创 2019-03-20 11:06:03 · 350 阅读 · 0 评论 -
Konig定理——最小点覆盖数等于最大匹配
转自:http://www.matrix67.com/blog/archives/116König定理是一个二分图中很重要的定理,它的意思是,一个二分图中的最大匹配数等于这个图中的最小点覆盖数。最小点覆盖:假如选了一个点就相当于覆盖了以它为端点的所有边,你需要选择最少的点来覆盖所有的边。比如,下面这个图中的最大匹配和最小点覆盖已分别用蓝色和红色标注。它们都等于3。这个定理相信大多数人都知道,...转载 2019-05-27 19:02:38 · 4036 阅读 · 1 评论 -
POJ365Ants_二分图最佳匹配
https://blog.youkuaiyun.com/lianai911/article/details/44835659题意:在坐标系中有N只蚂蚁,N棵苹果树,给你蚂蚁和苹果树的坐标。让每只蚂蚁去一棵苹果树,一棵苹果树对应一只蚂蚁。这样就有N条直线路线,问:怎样分配,才能使总路程和最小,且N条线不相交思路:假设A、B为蚂蚁,C、D为苹果树。则存在两种匹配:第一种是AD、BC,第二种是AC、B...转载 2019-05-30 22:06:37 · 248 阅读 · 0 评论 -
插头Uva753——最大流
题意:n个插座和m个插头,k种转换器(每种都是无限个,可以把插头转换成其他类型的插头),求最少剩多少个插头没插上插座。思路:首先给所有插头或插座以及转换器中涉及到的类型编号。然后根据转换器建立类型之间的转化关系,接着用Floyd算法算出每个设备所有适配的类型,并将其容量设为INF,表示转换器数量充足,可以有多个设备用同一种转换器。接着构建网络:所有的设备类型和源点连一条弧,容量为1(注意累...原创 2019-05-31 22:11:30 · 314 阅读 · 0 评论 -
uva11082矩阵解压
题意:对于一个R行C列的正整数矩阵,(1<=R,C<=20),设a[i]为前i行所有元素之和,b[i]为前i列所有元素之和,已知道R,C,和数组a,b,找一个满足条件的矩阵,矩阵中的元素必须是1~20之间的正整数,输入保证有解。思路:转化为网络流问题根据输入先算出每行,每列的和。每行的和减列数c,每列的和减行数r,这是为后面的容量做铺垫。每行(列)视为一个点,每行到每列连一条弧,...原创 2019-06-01 10:19:39 · 308 阅读 · 0 评论 -
最大费用循环流uva1659
思路1:边权取负,转化为最小费用循环流问题。类似于最小费用最大流,只不过每次不是找s->t的最小费用增广路,而是找整个图的一个负费用增广圈。沿着负圈增广,每个节点的流量平衡不变,而整个循环流的总费用减小。找负圈,用Bellman或SPFA,记录前驱。注意:从spfa中出来的点不一定是负圈里的点,需要回溯去找。// 4180 ms#include <cstdio>#in...原创 2019-06-06 20:55:20 · 726 阅读 · 0 评论 -
uva10735混合图的欧拉回路_最大流
题意:混合图的欧拉回路,存在的话输出路径,不存在输出提示信息。思路:回忆概念:如果图G中的一个路径包括每个边恰好一次,则该路径称为欧拉路径(Euler path)。如果一个回路是欧拉路径,则称为欧拉回路(Euler circuit)。无向图存在欧拉回路的充要条件一个无向图存在欧拉回路,当且仅当该图所有顶点度数都为偶数,且该图是连通图。有向图存在欧拉回路的充要条件一...原创 2019-06-02 13:58:45 · 393 阅读 · 0 评论 -
uva1349最优巴士路线设计——有向环覆盖——最小权完美匹配
题意:有向环覆盖。最小权值。思路:拆点法,每个点i拆成Xi,Yi,原图中的u->v对应二分图中的Xu -> Yv,把权值取反,就转化为最大权完美匹配了。Ps: 注意重边!#include <cstdio>#include <queue>#include <vector>#include <cstring>#include...原创 2019-06-03 20:56:11 · 657 阅读 · 0 评论 -
POJ2175-消圈算法
题意:题意:一个城市中有n个大楼,m个避难所,接下来给出n个大楼的坐标和人数,接下来m行给出每个避难所的坐标和容纳量,大楼到避难所的距离定义为曼哈顿距离+1,然后给出n行m列数据,第i行第j列代表从第i个大楼到第j个避难所去的人数,保证此方案合法,然后判断此方案是否所有人到避难所的距离和最小,是的话输出OPTIMAL,否则给出更好的方案,但不一定是最优的;思路:如果用最小费用最大流算法直接求...原创 2019-06-04 15:32:33 · 1312 阅读 · 0 评论 -
Hdu3416_Marriage_Match4(最短路+最大流)
题意:给出一个有向图,求最短路的个数,不同的最短路不能共用一条边。思路:刚开始想到的是把费用流改造一下,每次找到一条增广路就把这条路径满流(只能走一次),记录下第一次的耗费(最少),后面再找到增广路的时候检查耗费是否等于第一次的耗费,如果大于,则结束,如果等于,则计数。这个方法跑了太多次最短路,超时。还有一种方法是,先跑最短路,找出最短路的路径,在此基础上建立网络跑最大流。找最短路的路径...原创 2019-07-26 20:03:29 · 115 阅读 · 0 评论