网络流
银之夏雪
这个作者很懒,什么都没留下…
展开
-
hdu4292Food(网络流裸题)
这道题目的意思是:每个人对n种食物有接受或不接受,对饮料也是如此,每个人都要吃食物喝饮料,当然同种食物饮料也可以有多个,现在让你求最多能满足多少人,注意要拆点,因为可能左边一堆食物,右边一堆饮料,某个人都喜欢它们,可能把所有路都连了,应该是三条路,但明明只有一个人,所以说要把一个人拆成两个,然后中间的容量用1表示,代码如下#include <iostream>#include <stdio.h>原创 2016-04-06 19:37:44 · 623 阅读 · 0 评论 -
hdu4807Lunch Time(费用流)
题意:在一个有向图当中,现在每一条边带有一个容量,现在有K个人在起点,需要到终点去吃饭,询问这K个人最后一个人到达食堂的最小时间是多少。 想法:联想到普通的网络流,那么我们网络流可以很轻松的求出两个点之间的最大容量是多少,但是现在的问题就是刚开始在起步的时候那么最开始的容量是不可能到达最大的,因为人还在途中,假设我们从时间角度来分析这个问题,再联想到我们网络流求法,费用流当中,求出来的就是当然费用原创 2016-09-21 15:12:08 · 405 阅读 · 0 评论 -
网络流24题之飞行员配对方案问题(nefu475)
飞行员配对方案问题 Problem:475Time Limit:1000msMemory Limit:65536KDescription 第二次世界大战时期,英国皇家空军从沦陷国征募了大量外籍飞行员。由皇家空军派出的每一架飞机都需要配备在航行技能和语言上能互相配合的2 名飞行员,其中1 名是英国飞行员,另1 名是外籍飞行员。在众多的飞行员中,每一名外籍飞行员都可以与其他若干名英国飞行员很原创 2016-09-07 10:24:21 · 375 阅读 · 0 评论 -
nefu474The Perfect StallHal Burch(最大流)
这道题目其实用二分图是可以写的,我是想练练网络流,所以就用这个写一下有了源点和汇点,源点到左边每个的流量都是1,也就是只能通过1 次,汇点也类似,而左边的点到右的点对应的边的边容量为1,就这样,这道题成功转换为最大流问题,建图后最大流解决#include<stdio.h>#include<iostream>using namespace std;const int oo=1e9;/**oo原创 2016-09-07 10:14:03 · 324 阅读 · 0 评论 -
poj1273&&nefu473Drainage DitchesHal Burch(最大流)
这题是标准的入门模板题,不过因为点是从0开始的,而这道题目是没有0的,所以要不然就在prepare语句那里写成prepare(m+1,1,m),要不然就从0开始,把每个点减一#include<stdio.h>#include<iostream>using namespace std;const int oo=1e9;/**oo 表示无穷大*/const int mm=111111111;原创 2016-09-05 11:28:58 · 282 阅读 · 0 评论 -
网络流24题之太空飞行计划问题(nefu476)
DescriptionW教授正在为国家航天中心计划一系列的太空飞行。每次太空飞行可进行一系列商业性实验而获取利润。现已确定了一个可供选择的实验集合E={E1,E2,…,Em},和进行这些实验需要使用的全部仪器的集合I={I1,I2,…In}。实验Ej需要用到的仪器是I的子集。配置仪器Ik的费用为ck美元。实验Ej的赞助商已同意为该实验结果支付pj美元。W教授的任务是找出一个有效算法,确定在一次太空飞原创 2016-09-07 10:04:10 · 343 阅读 · 0 评论 -
hdu5294(最大流+最短路)Tricks Device
这道题刚开始想了很久,而且之前一直不明白dicnic既然已经求了阻塞流,为什么还需要反向弧呢,现在如图: 2和3是一层,4和5是一层,然后你要是走1->2->4->6的话,如果没有反向弧,你会发现最大流是2,没有增广路了,而当有了反向弧之后,你还可以走1->3->4->2->5->6,以前总听别人说有反向弧,然而一直没找到合适的例子,今天终于让我找到了,非常开心 下面说一下今天这道题,这个题原创 2016-04-08 22:04:57 · 657 阅读 · 0 评论 -
hdu5855Less Time, More profit(网络流)
多校的网络流题目,当时太菜没想出来该如何建边,拖了好久才写完,哎,效率不是一般的低啊 题意:给N个工厂,修建每个工厂需要pay[i]的花费,t[i]的时间。 给M个商店,每个商店能带来pro[i]的收益,但需要特定的k个工厂为它供货。 现在给出一个L,要求给出一个方案,使修建工厂所花费的时间最小,同时满足收益大于等于L且收益尽可能大。 思路是:先把时间排个序,然后反正一共200个时间,枚举一原创 2016-09-01 22:45:44 · 350 阅读 · 0 评论 -
网络流24题之最小路径覆盖问题(nefu481)
【问题分析】有向无环图最小路径覆盖,可以转化成二分图最大匹配问题,从而用最大流解决。【建模方法】构造二分图,把原图每个顶点i拆分成二分图X,Y集合中的两个顶点Xi和Yi。对于原图中存在的每条边(i,j),在二分图中连接边(Xi,Yj)。然后把二分图最大匹配模型转化为网络流模型,求网络最大流。最小路径覆盖的条数,就是原图顶点数,减去二分图最大匹配数。沿着匹配边查找,就是一个路径上的点,输出所有路径即可原创 2016-09-13 15:42:15 · 1192 阅读 · 0 评论 -
poj2195Going Home(费用流或KM算法)
这道题目是比较简单的模板题,我用了两种方法写了一下,需要注意的是用KM算法写的时候,因为这个算法本身求得是二分图最大权匹配,而这道题求的是最小,那么应该在加边的时候把权值乘负一#include <iostream>#include <stdio.h>#include <stdlib.h>#include<string.h>#include<algorithm>#include<math.h原创 2016-09-12 19:15:29 · 435 阅读 · 0 评论 -
网络流之方格取数问题nefu482
分析(引用 BYvoid大牛的分析): 二分图点权最大独立集,转化为最小割模型,从而用最大流解决。 建模方法: 首先把棋盘黑白染色,使相邻格子颜色不同,所有黑色格子看做二分图 X集合中顶点,白色格子看做Y集合顶点,建立附加 源 S汇T。 1、从 S向 X 集合中每个顶点连接一条容量为格子中数值的有向边。 2、从 Y集合中每个顶点向 T 连接一条容量为格子中数值的有向边。 3、相邻黑白格原创 2016-09-09 11:07:13 · 417 阅读 · 0 评论 -
hdu2444The Accomodation of Students(二分图判断+最大匹配)
这道题虽然是二分图,但我还是用网络流写的#include <iostream>#include <stdio.h>#include <string.h>#include <queue>using namespace std;const int oo=1e9;const int mm=131111;const int mn=999;int node,src,dest,edge,n,m,原创 2016-04-24 17:50:33 · 340 阅读 · 0 评论 -
nefu500(二分+最大流)
这道题目是求所走的路线中,费用最大的那条边的值最小,一般说什么最大的最小之类的就应该是二分,其实这个题刚开始没有想到是网络流的,因为费用和流量都有,有点蒙,后来发现件数当流量,然后费用当条件,就ok了#include <iostream>#include <stdio.h>#include <string.h>using namespace std;const int oo=1e9;con原创 2016-04-18 21:43:29 · 326 阅读 · 0 评论 -
HDU 4411 Arrest 费用流
费用流是每次找最短路然后沿着这条路增广,然后这条路因为增广了,所以就流量为0,相当于不存在了,所以可以继续找最短路,不怕出现重复,然后求的是全图的,这点切记 有n+1个城市,0市为警察局所在城市其中有k个警察,在其他n个城市中,均有小偷。有m条路,每条路有其特定路程,求k个警察将n个城市的小偷全抓捕到0市的最短路程。其中抓小偷必须从1、2、3、、、n按照城市号码严格递增顺序抓。 最小费用流的问原创 2016-04-17 17:02:57 · 350 阅读 · 0 评论 -
poj1087 A Plug for UNIX 最大流
这道题目是一个比较容易建边的最大流,在一个会议室里有n种插座,每种插座一个,每个插座只能插一种以及一个电器(或者适配器),有m个电器,每个电器有一个插头需要插在相应一种插座上,有k种适配器,每种适配器可以有无限多数量,每种适配器(a, b)可以把b类插座变为a类插座,问最后有多少个电器无法使用,增加一个源点src,一个汇点dest,然后插头和源点相连,电器和汇点相连,容量都为1,需要注意的是(适配器原创 2016-04-16 23:41:04 · 316 阅读 · 0 评论 -
acdreamoj 1211 有上下界的网络流
这是一道有下届的网络流的题目,刚开始不是很会搞,学了一段时间,其实就是新建立一个源点S和汇点T,然后每条边(u,v),容量是c,最低下限是b,连S 到v和u到T的容量为b的边,之后再连接u到v的容量为c-b的边,最后求的是各边流量,跑一遍最大流,如果等于最低下限和,那么就有可行流#include <iostream>#include <vector>#include <stdio.h>usin原创 2016-04-14 10:33:52 · 325 阅读 · 0 评论 -
hdu5045 Contest(费用流)
这个题目刚开始看没思路,听别人说是费用流,打死也没看出来,后来发现自己傻了,确实很简单,这个题是说n个人,m道题,然后每答完一道题,任意两个人答题的数目的差不能大于1,所以比如说4个人,10个题,那么一定是,前四个题目每人一个,5到8题没人一个,后两个随机,但也必须每人最多做一个,这样的话其实就是跑了m/n+1次费用流,因为要以费用跑最短路,所以要把费用变成其相反数来做,还有就是注意是浮点数,不能硬原创 2016-04-26 22:05:43 · 349 阅读 · 0 评论 -
hdu4289Control(网络流)
这道题目问的是你需要最少布置多少警力,也就是求最小割,最小割即为最大流,那么把相连的边的权值都赋成无穷大,然后拆点,把点权变成两点之间的边权,然后就可以操作了,至于应该怎么连呢 一定要首尾互联,第一个图对,如果按照第二张图的连法,那么就无法构成回路#include <iostream>#include <algorithm>#include <stdio.h>#include <string原创 2016-04-07 19:22:41 · 543 阅读 · 0 评论 -
hdu5889Barricade(最短路+网络流)
Barricade Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 219 Accepted Submission(s): 57Problem Description The empire is under attack aga原创 2016-09-18 21:50:43 · 517 阅读 · 0 评论