图论-网络流
文章平均质量分 84
围巾的ACM
啊啊什么时候也能成为一个大牛啊
展开
-
哈理工大学ACM程序设计全国邀请赛A Golds(网络流)
题意:有一个N(思路:一眼网络流是必然的,比赛的时候想歪了一下并且读错了一下题目导致我的做法会拆出8000个点来。。。正解应该是源点S连向树上的每个节点,流量为该点权值,汇点T连向每个机器人,流量为最大采集量,然后机器人可以走哪些路径就将它连向机器人的点,跑一次最大流即可#includeusing namespace std;const int maxn = 4005;#de原创 2016-12-04 23:18:42 · 454 阅读 · 0 评论 -
UVA 1515 Pool construction(网络流)
题意思路:见紫书,非常巧妙的网络流建图#includeusing namespace std;#define INF 1e9const int maxn = 2505;struct Edge{ int from,to,cap,flow; Edge(int u,int v,int c,int f):from(u),to(v),cap(c),flow(f){}};原创 2016-04-16 20:32:41 · 459 阅读 · 0 评论 -
UVA 11082 Matrix Decompressing(网络流)
题意:给一个R行C列的正整数矩阵,设Ai为前i行所有元素之和,Bi为前i列所有元素之和,已知R和C,和数组A,B,找一个满足条件的矩阵,矩阵中所有元素必须是1到20的正整数。思路:万万想不到是用网络流来做...首先根据Ai和Bi计算出第i行的元素之和和第i列的元素之和,如果把矩阵里面的每个数减去一,则每个Ai'会减少C,同理Bi‘减少R,则每个元素的范围变成了0-19.为什么要这样做呢,因为网原创 2016-04-16 19:49:22 · 434 阅读 · 0 评论 -
UVA 1349 Optimal Bus Route Design(网络流)
题意:给n个点的有向带权图,找若干个有向圈,使得每个点恰好属于一个圈,要求权和尽量小。思路:每个点恰好属于一个有向圈,意味着每一个点都有一个唯一的后继,反过来,只要每一个点都有唯一的后继,每个点一定恰好属于一个圈,说明每个点出度为1,入度为1,然后拆点做网络流吧#includeusing namespace std;#define LL long longconst int原创 2016-04-16 15:46:16 · 453 阅读 · 0 评论 -
UVA 1658 Admiral(拆点+费用流)
题意:给出一个n个点m条边的有向加权图,求1-N的两条不相交路径的权值和最小思路: 把2到n-1的每个结点拆点,中间连一条容量为1的边,然后求1到n的流量为2的最小费用流就好了#includeusing namespace std;#define LL long longconst int maxn = 2005;#define INF 1e9struct Edge{原创 2016-04-16 12:54:12 · 531 阅读 · 0 评论 -
BZOJ 3504: [Cqoi2014]危桥 最大流
题意:中文题思路:网络流,正常建边之后跑一遍网络流,但是这样可能会使得a1到an的流量跑到b1到bn去了,所以把b换过来,然后再跑一发网络流就好了#includeusing namespace std;#define INF 1e9const int maxn = 2550;struct Edge{ int from,to,cap,flow; Edge(int u,原创 2016-04-28 18:38:38 · 292 阅读 · 0 评论 -
CodeForces 164C Machine Programming(费用流)
题意:有n个任务,m个机器,每个机器同一时间只能处理一个任务,每个任务开始时间为s,持续时间为t,做完可以赚c元,问你做哪几个任务可以拿到最多的钱,输出方案思路:把所有时间扔到一个队列里面排序然后建立源点到最开始任务的起始时间-第二个时间-第三个时间-….-最后一个时间点-汇点,期间流量都是m,花费为0然后对于每一个任务,连一条开始时间到结束时间+1的边,花费为-c,流量为1的,然后这样跑费用流一定原创 2016-04-13 21:28:01 · 601 阅读 · 0 评论 -
IndiaHacks 2016 - Online Edition (Div. 1 + Div. 2) D. Delivery Bears 二分+网络流
题意:给一个图,每个边有边权,然后有x只熊,每个熊都要背负一样重量的货物,每头熊通过一条路径到i,每条边被所有熊经过的次数乘于货物重量不能大于边权,然后问你最大的货物总重量是多少,每只熊都必须要用,每个熊背负的货物重量一致,所以等价于求每只熊背负的货物的最大重量思路:二分最大货物总重量,然后跑网络流#include #include #include #include #i原创 2016-03-20 15:53:09 · 413 阅读 · 0 评论 -
HDU2485 Destroying the bus stations(floyd+最大流)
题意:一个图,每条边权值为1,其中毁坏多少个点可以使得从1到n至少要花费k+1的时间思路:首先求一次floyd,如果从1到n原本就需要大于k的时间那么输出0即可,如果小于的话,那么就在最短路径上选择d[1][k]+d[k][n]吐槽:这题WA了无数次,尝试了各种姿势,最后瞎改了maxn为10010,就过了,一开始我写的是1200...可是题目写的n不是最大是50么..那么我拆点最多不也才1原创 2016-02-12 16:39:41 · 310 阅读 · 0 评论 -
HDU 3667 Transportation(最小费用最大流)
题意:有N个节点M条边的有向图,现在你需要从1号节点运送k个货物到N号节点. 每条边都有一个ai和ci值,ci值是指该边最多能运ci个货物,而你如果在该边运x(1思路:这里显然是最小费用最大流的问题,问题是每条边的权值为一个函数,大白书上有讲,举个例子,比如最多能运4个货物,那么在该边分别运1,2,3,4个货物的代价就是ai*1,ai*4,ai*9,ai*16,那么相减一下有ai*1,ai*3原创 2016-02-12 13:19:58 · 389 阅读 · 0 评论 -
BZOJ 4443 小凸玩矩阵
题意:中文题思路:二分答案,然后比较显然的网络流建图之后看看最大流是否大于n-k+1就可以了#includeusing namespace std;#define INF 1e9+100const int maxn = 250*250+100;struct Edge{ int from,to,cap,flow; Edge(int u,int v,int c,int f原创 2016-04-29 20:35:35 · 339 阅读 · 0 评论 -
UVA 820 Internet Bandwidth(最大流)
思路:UVA上的真是阅读题....读懂题目之后其实就是一个最大流裸题...#includeusing namespace std;#define INF 1e9const int maxn = 1000;struct Edge{ int from,to,cap,flow; Edge(int u,int v,int c,int f):from(u),to(v),cap(c)原创 2016-04-17 11:31:35 · 970 阅读 · 0 评论 -
hdu 5988 Coding Contest (费用流)
思路:求网线被破坏的最小概率可以转化为不被破坏的最大概率来求,这个概率显然就是你要经过哪些点的(1-p)的乘积嘛,那么取个log就变成加法的了,令源点连向人数多余的点,汇点连向食物多余的点,跑一次最小费用最大流然后再取回对数就可以了坑点:注意精度,在最短路松弛的时候要加个eps#include#include#include#include#include#include原创 2016-11-22 09:08:15 · 1634 阅读 · 2 评论 -
HDU 5520 Number Link(费用流)
题意:给你一个n*m的网格,部分网格有数字,要求奇数的数字要和偶数的数字连在一起,空白的数字要成环,给你每个格子连接上下左右的费用,求满足条件最小费用思路:考虑费用流,讲每个点拆点,源点S连向所有奇数点的入点,T连向所有偶数的出点,然后S连所有空白的入点,出点连T,上下左右的入点连向各自的出点,这样跑一次最小费用最大流即可#includeusing namespace std;原创 2016-10-18 18:19:31 · 770 阅读 · 0 评论 -
hdu5889 Barricade(最短路+网络流)
思路:先跑一次最短路,然后把最短路上的边扔进网络流跑一次最小割就好了,和HDU3416异曲同工#includeusing namespace std;const int maxn = 2005;#define inf 1e9#define INF 1e9const int maxm = 4000000+50;struct Node{ int v,w; Node(int原创 2016-09-18 00:07:04 · 792 阅读 · 0 评论 -
hdu3416 Marriage Match IV(网络流+最短路)
思路:先求一次最短路把最短路上的边都弄出来之后加进网络流里,连一条容量为1的边即可#includeusing namespace std;const int maxn = 2005;#define inf 1e9#define INF 1e9const int maxm = 4000000+50;struct Node{ int v,w; Node(int vv,in原创 2016-08-04 22:51:30 · 482 阅读 · 0 评论 -
HDU 4780 Candy Factory(网络流)
思路:这种乱七八糟这么多条件的...全部扔进图里面好了,另外注意的是因为糖果只能生产一次,所以需要拆下点就OK了#includeusing namespace std;const int maxn = 500;#define INF 1e9struct Edge{ int from,to,cap,flow,cost; Edge(){} Edge(int f,int t,原创 2016-06-08 15:04:17 · 459 阅读 · 0 评论 -
UVALive 7037 The Problem Needs 3D Arrays(网络流)
思路:将所有逆序对连边,就是最大密度子图问题,参照论文~#include#include#includeusing namespace std;const int maxn = 8010;const int maxm = 1000010;const int INF = 1e9;const double eps = 1e-12;struct Edge{ int to,原创 2016-06-01 22:38:44 · 482 阅读 · 0 评论 -
FZU 2143 Board Game
题意思路:见这个,写的很详细了,题解,主要难在建图和流量大于等于0的时候就停止增广#include#include#include#include#includeusing namespace std;#define LL long longconst int maxn = 2005;#define INF 1e9struct Edge{ int from,to,原创 2016-04-19 22:18:25 · 520 阅读 · 0 评论 -
HDU 4744 Starloop System(ZKW最小费用最大流)
思路:建图是显而易见的不过用普通的最小费用最大流超时了...改用ZKW才过了#includeusing namespace std;const int maxn = 210;const int maxm = 210*210*2;#define INF 1e9struct ZKW_flow{ int st,ed,ecnt,n; int head[maxn]; int ca原创 2016-05-03 20:29:25 · 1118 阅读 · 0 评论 -
UVA 1660 Cable TV Network(最大流)
题意:给一个n个点的无向图,求它的点连通度,即最少删除多少个点,使得图不连通思路:求点连通度,边连通度都可以转化为网络流来做,拆点如果有U->V,那么连U+N->V和V+N->U,然后枚举源点汇点求最大流即可#includeusing namespace std;#define INF 1e9const int maxn = 1000;struct Edge{ int原创 2016-04-17 15:56:41 · 811 阅读 · 0 评论 -
HDU 2686 Matrix(费用流)
题意:有一个n*n的矩阵,矩阵的格子中每个都有一个正数.现在你要从左上角走到右下角去,然后在从右下角回到左上角.过程中除了左上角和右下角外,任意网格最多走一次,且要求你所走过的所有网格的权值和最大,为最大值是多少?思路:和POJ3422一个类型的题目都是在矩阵中特定的走法求权值最大,建图的话都是拆点来做,一个表示进,一个表示出,这里因为要从(1,1)走到(n,n)再回到(1,1)相当于找两条除原创 2016-02-11 22:49:19 · 269 阅读 · 0 评论 -
HDU3488 Cyclic Tour(有向环最小覆盖)
思路:和hdu1853几乎一样的代码和思路...#include#include#include#include#include#define INF 1e9using namespace std;const int maxn=400+5;struct Edge{ int from,to,cap,flow,cost; Edge(){} Edg原创 2016-02-11 21:47:23 · 349 阅读 · 0 评论 -
HDU 3315 My Brute(费用流)
题意:有S1到Sn这n个勇士要和X1到Xn这n个勇士决斗,初始时,Si的决斗对象是Xi. 如果Si赢了Xi,那么你将获得Vi分,否则你将获得-Vi分. Si和Xi对决时,Si有初始生命Hi,初始攻击Ai, Xi有初始生命Pi,初始攻击Bi. 且Si先出手,然后Xi失去Ai生命,之后如果Xi没死,那么Xi出手,Si失去Bi生命. 直到有一方的生命值 现在要你重新安排S和X的决原创 2016-02-12 18:04:02 · 359 阅读 · 0 评论 -
POJ1087 A Plug for UNIX(最大流)
题意:有m个设备需要插座(给出了每个设备需要的插座型号),但是现在只有n个插座(任意两个插座类型不相同,因为题目说每种类型插座就一个),且给你k个转换器(转换器(u,v)可以使得插座v转接到u上),问你最多有几个设备没有插座可用?思路:建图: 源点s(编号0)到每个设备i有边 (s,i,1). 每个插座到j到汇点t(编号n+m+1)有边原创 2016-02-08 17:19:10 · 347 阅读 · 0 评论 -
POJ 2289 Jamie's Contact Groups(二分+最大流)
题意:有n个人要把他们分成m个组,给出每个人可以分到的组的编号,每个人只能分到一个组,怎样分配能使最大组人最少,输出最大组的人的数量思路:首先题目要求最大组最少,这种一般都是二分。 建图:0为源点,每个人到源点连一条容量为1的边,每个人和能分配的组连一条容量为1的边(注意组的编号是从0开始的,要处理一下),二分最大组人数t,每个组和汇点n+m+1连一条容量为t的边,最后原创 2016-02-08 15:07:32 · 610 阅读 · 0 评论 -
POJ 1459 Power Network(最大流)
题意:第一眼看到这题目觉得神题啊...其实题目给的s[i]压根不用管的....总共有n个结点,其中有发电站np个、用户nc个和调度器n-np-nc个三种节点以及M条电线(用于传输电流的),每个发电站有一个最大发电量,每个用户有个最大接受电量,现在有m条有向边,边有一个最大的电流量,表示最多可以流出这么多电,现在从发电站发电到用户,问最多可以发多少电(被用户接受).思路:建图:原创 2016-02-08 14:28:43 · 232 阅读 · 0 评论 -
POJ 1698 Alice's Chance(最大流)
题意:爱丽丝要拍电影,有n部电影,规定爱丽丝每部电影在每个礼拜只有固定的几天可以拍电影,只可以拍前面w个礼拜,并且这部电影要拍d天,问爱丽丝能不能拍完所有的电影?思路:直接说建图吧。0为源点,1-350为每一天,因为最多50周,源点和每一天连一条容量为1的边,350+n+1为汇点,每一部电影和汇点连一条容量为拍摄这部电影的时间的边,如果某天可以拍某部电影,就连一条容量为1的边,最后跑一遍最大流原创 2016-02-08 00:18:15 · 230 阅读 · 0 评论 -
POJ 3498 March of the Penguins(枚举+最大流)
题意:在X,Y坐标系中有N(N离开..就会消失..问有哪些冰块可以作为集合点..就是所有企鹅都能成功到这个冰块上来.思路:枚举每一块冰块,看看最大流能否等于企鹅总数即可 建图:把每块冰分成两个点i和i+n. i表示进入i冰块的点(可以有无数企鹅过来,所以从别的冰到i有边,容量为INF) i+n表示从i冰块出去的点(最多只能有Mi企鹅从这跳出去,所以从i到i+原创 2016-02-07 21:54:05 · 367 阅读 · 0 评论 -
POJ 2112 Optimal Milking(二分+floyd+最大流)
题意:k个机器,每个机器最多服务m头牛。c头牛,每个牛需要1台机器来服务。告诉你牛与机器(牛与牛,机器与机器)每个之间的直接距离。问:让所有的牛都被服务的情况下,使走的最远的牛的距离最短,求这个距离。思路:弱化版的POJ2391,用floyd算法求出任意两点(牛或机器)之间的最短距离.然后我们二分该距离,建立网络流图.假设我们当前二分的距离为x.首先是源点s到任意牛i之间有边(s,i,1).原创 2016-02-07 14:55:30 · 249 阅读 · 0 评论 -
POJ3281 Dining(最大流)
题意:有F种食物和D种饮料,每种食物或饮料只能供一头牛享用,且每头牛只享用一种食物和一种饮料。现在有N头牛,每头牛都有自己喜欢的食物种类列表和饮料种类列表,问最多能使几头牛同时享用到自己喜欢的食物和饮料。 (1 思路:一开始是想食物连着源点,然后饮料连着汇点,中间是牛,发现WA,后来想了想这种做法的问题在于这个每只牛只能享用一种食物和饮料,要是和我那样做就可能一只牛享受多种饮料或食物了,因为网原创 2016-02-06 18:48:09 · 284 阅读 · 0 评论 -
poj2391 Ombrophobic Bovines(二分+floyd+最大流)
题意:给定一个有n个顶点和m条边的无向图,点i 处有Ai头牛,点i 处的牛棚能容纳Bi头牛,每条边有一个时间花费ti(表示从一个端点走到另一个端点所需要的时间),求一个最短时间T使得在T时间内所有的牛都能进到某一牛棚里去。(1 <= N <= 200, 1 <= M <= 1500,0 <= Ai 思路:第一次做网络流的小白完全不知道怎么建图....每一个牛棚都可以看作一个汇点,所以构造一原创 2016-02-06 17:16:05 · 297 阅读 · 0 评论 -
poj1273 Drainage Ditches(最大流入门)
思路:又是一道模板题#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;#define maxn 250#define INF 1<<2原创 2016-02-06 14:16:28 · 279 阅读 · 0 评论 -
HDU 3572 Task Schedule(最大流)
题意:给N个任务,M台机器。每个任务有起始时间S,最后期限 E,和完成这个任务需要的时间P。每个任务可以分段进行,但是在同一时刻,一台机器最多只能执行一个任务. 问存不存在可行的工作时间。思路:这题由于每一个任务都是可以断断续续这样完成的,所以一开始不知道怎么建图,留意到这里一共的时间才500,所以可以把每一天都作为一个顶点,任务的编号为500+1到500+n,汇点为500+n+1原创 2016-02-08 21:20:55 · 317 阅读 · 0 评论 -
HDU 3081 Marriage Match II(二分+并查集+最大流)
题意:有N个女孩要与N个男孩玩配对游戏.每个女孩有一个可选男孩的集合(即该女孩可以选自己集合中的任意一个男孩作为该轮的搭档).然后从第一轮开始,每个女孩都要和一个不同的男孩配对.如果第一轮N个女孩都配对成功,那么就开始第二轮配对,女孩依然从自己的备选男孩集合中选择,但是不能选那些已经被该女孩在前几轮选择中选过的男孩了(比如i女孩在第一轮选了j男孩,那么i在第二轮就不能选j男孩了). 问你游戏最原创 2016-02-08 23:14:03 · 261 阅读 · 0 评论 -
HDU 3435 A new Graph Game(费用流)
题意:给你一个N个节点M条边的无向图,要你求该图有1个或多个不相交有向环构成时,所有这些有向环的最小权值.思路:和HDU1853差不多,只是变成了无向图,那么把一条无向边变成两条相反方向的有向边即可注意:有重边,要处理一下#include#include#include#include#include#define INF 1e9using namespace st原创 2016-02-11 19:27:10 · 235 阅读 · 0 评论 -
HDU1853 Cyclic Tour(有向环最小覆盖)
题意:给你一个N个点M条边的带权有向图,现在要你求这样一个值: 该有向图中的所有顶点正好被1个或多个不相交的有向环覆盖(每个节点只能被一个有向环包含).这个值就是 所有这些有向环的权值和. 要求该值越小越好.思路:有向环的最小覆盖问题,首先考虑该图中所有顶点正好被1个或多个不相交的环覆盖的话,就意味着图中的每个顶点出度和入度均为1,那么对于每个顶点就可以把它拆成两原创 2016-02-11 17:02:29 · 544 阅读 · 0 评论 -
POJ3422 Kaka's Matrix Travels(费用流)
题意:给一个N*N的方阵,从[1,1]到[n,n]走K次,走过每个方格加上上面的数(每个方格初始都有一个非负数),然后这个格上面的数变为0。求可取得的最大的值。思路:一开始以为是DP...囧...后来反应过来在做费用流的专题...这题很显然是把每个方阵的每个点当作顶点,连边求最大费用最大流,可是如果走过一次之后那个格子要变成0,不知道怎么处理,有一种很巧妙的处理,就是拆点。把每个点拆成i和i+原创 2016-02-11 16:40:10 · 289 阅读 · 0 评论 -
POJ 2195 Going Home(费用流)
题意:给定一个N*M的地图,地图上有若干个man和house,且man与house的数量一致。man每移动一格需花费$1,一间house只能入住一个man。现在要求所有的man都入住house,求最小费用。思路:明显的最小费用最大流,源点为0,每个人为一个点连源点,容量为1,边权(费用)为0,每个人连每一间房子,容量为1,边权为两者坐标之差的和,然后房子和汇点连边,容量为1,边权为0即可,非常原创 2016-02-10 23:34:08 · 328 阅读 · 0 评论 -
POJ 2516Minimum Cost(最小费用最大流)
题意:给出n个客户对k种商品的需求量,又给出m个仓库对k种物品的存货量以及对k种物品从i仓库到j客户的一个物品的运费价格,让判断是否可以满足客户需求,然后就是如果满足求出最小的运费.思路:简单的最小费用最大流,注意建图细节即可。下面解释转自网上。 首先必须判断m个仓库是否有足够的k种商品给n个客户,如果不足,那么明显就是不行的. 下面假设仓库的商品足够的话:原创 2016-02-10 23:44:31 · 1225 阅读 · 0 评论