网络流专题
文章平均质量分 78
流風回雪_YZK
只盼来日登蜀道..
展开
-
hdu 1533 流流流
把每个点移动到对应位置的总费用最小。建图后费用流。继续水水练练手~#include#include#include#include#includeusing namespace std;const int inf=0x3f3f3f3f;const int MAXN=20005, MAXE=4000000;int e[MAXE][4];int head[MAXN];int num原创 2015-03-21 11:00:37 · 688 阅读 · 0 评论 -
hdu 3081 hdu 3277 hdu 3416 Marriage Match II III IV //最大流的灵活运用
3081 题意: n个女孩选择没有与自己吵过架的男孩有连边(自己的朋友也算,并查集处理),2分图,有些边,求有几种完美匹配(每次匹配每个点都不重复匹配) 我是建二分图后,每次增广一单位,(一次完美匹配),再修改起点还有终点的边流量,继续增广,直到达不到完美匹配为止。网上很多是用二分做的,我觉得没必要。。。(网上传播跟风真严重。。。很多人都不是真正懂最大流算法的。。。)3277原创 2014-08-13 21:59:55 · 868 阅读 · 0 评论 -
hdu 4975 最大流及其唯一性判定(有向图环判断算法升级)
就当时最大流再次复习吧。。动手敲一下。。。经典解法不想说了。。这题主要是坑时间,10个提交7个tle。环的判断,曾经用简单dfs方法,这次的就tle了!别人说要用很屌的dinic,我感觉自己dinic不可能超时,坚信是判断环慢了,于是学习了新断环的方法:删除点/边!从某点进去,若该点的所有边都遍历过还是无功而返,那么该店以后不用再进入了(这么简单的道感觉自己应该要想到啊!愚蠢啊!)开始时用只删原创 2014-08-23 22:06:24 · 1261 阅读 · 0 评论 -
hdu 4971/ 2014多校/最大权闭合图
题意:n个项目(每个对应获得一定价值),m个技术问题(每个需要支出一定价值),每个项目必需要攻克若干个技术问题。技术难题之间有拓扑关系。关键是建图。一看,第一感觉就是最大权闭合图,立即建好了图。不难:以项目为正权点,问题为负权点,有依赖关系的点边即可。ps:这题题目有句话有问题,按样例的来!害我贡献一次WA.....#include#include#include#incl原创 2014-08-22 11:06:19 · 851 阅读 · 0 评论 -
hdu3338 / 方格横纵和问题终极版,最大流斩
此题被誉为神奇最大流,诱惑我去做了下,感觉也是通常的思路。题意:1.用1-9去填,满足所给的行/列和要求(和那个什么游戏差不多。。。)求一种合法方案,输出。如: 一看,直接就建图了,每个点在白色的点中间,由横和=纵和,管理横和的在左边,纵和的点在右边。S->横和点,纵和点到t,建图即可。有一点注意,由于只能用1-9去填,是有上下界的网络流问题,所以原创 2014-08-11 10:34:24 · 1453 阅读 · 0 评论 -
hdu4183往返经过至多每个点一次/最大流
题意:从s到t,每个点有f值,只能从f值小的到大的,到T后回来,只能从f值大的到 小的,求可行否。往返,其实就是俩条路过去(每个点最多一次),所以想到流量为2,跑最大流,看是否满2,又要每个点最多一次的条件,故每个点拆为2个,都是常用的。注意一下起点的拆点流量为2.#include#include#include#includeusing namespace std;cons原创 2014-08-07 19:42:59 · 1093 阅读 · 0 评论 -
hdu3572 任务分配/最大流判断满流
题意:将n个任务分配为m个机器,给每个任务需要的天数(无需每天连续),和可以在哪些天去做该任务,求是否存在方案。典型的任务(X)----天(Y)二分最大流,(因为这里任务是与天的关系)处理器控制流量,源点向X部点,指需要的天数,任务xi,向可以做的天连,流量1,每个Y部点向汇点连流量为m,表示该天最多用M个机器。ps:注意输出格式#include#include#include#原创 2014-08-07 11:50:44 · 1005 阅读 · 0 评论 -
hdu4619 / 最大独立集
题意,一个矩阵,上面可以横放或者竖着放骨牌(1X2)保证横的与横的不重叠,竖的和竖的不重叠,求拿掉最小的牌,使所有的都不重叠。分析:一看,不重叠就是没有边,拿最少,就是留最多,最大独立集啊!二分图,n+m个-最大流(最大匹配)=ans。简单题。#include#include#include#includeusing namespace std;const int inf=0原创 2014-08-01 16:51:59 · 1069 阅读 · 0 评论 -
hdu3947 给一些已知(需费用)路径去覆盖一些边 //预先加灌法费用流
River Problem题意:一个有向树(河流),只有一个汇点1,每条边只有一个出度。有些河道有污染指数xi,必需要治理,有m段路径,可以去覆盖这些,每被覆盖一次,xi降低响应值。:即 给出一些边必需要覆盖的次数,用m段路径去覆盖,每次覆盖有相应费用,求最小费用。思路:这题被誉为难题,给一个网络流,给出一些边的流量下界,以及给用某些路段流量去流满足要求。这里与正常网络流相悖,是wi>原创 2014-08-06 16:48:07 · 1013 阅读 · 1 评论 -
求二分图最大权一个匹配(未必最大匹配),/费用流
题意:根据题意建立模型:给一幅混合图,有些带边,求选取一些边,使得权值最大,而且保证每个点入度和出度都最多是1.开始的时候题意理解出错。思路:件二分图,最大权匹配,但是可以不是所有点都参与匹配,(都参与未必最大。因此,在费用流法基础上:每个X部点向汇点也有边即可。这样保证最大流为n,而且未必所有点都匹配。#include#include#include#include#in原创 2014-07-29 22:56:04 · 959 阅读 · 1 评论 -
用“道”的思想解决费用流问题---取/不取皆是取 (有下界->有上界) / ACdreamoj 1171
题意: 给一个矩阵,给出约束:i(0 开始一见,就直接建了二分图,但是,发现这是有下界无上界最小费用流问题,肿么办。。。问题转化:所谓正难则反!现在某行/列要至少取k个,总和最小,不就是那行/列最多留下K个,使留下的和最大?其实也就是最多取k个,使值最大,转化为下界为0,有上界的最大费用问题(普通问题)。“取”,“不取”,本质都是一样的,正是“无为”的思想!取,则最小;不取,最大。道原创 2014-08-03 10:06:33 · 1085 阅读 · 0 评论 -
hdu3452 无向树去掉最小的边集使任何叶子与根不连通 / 最小割
思路一下就上来了,叶子向汇点连边,inf保证不会成为割,跑根到汇点最小割即可。注意无向树双向建边。基础题,分分钟1A:#include#include#include#include#include#includeusing namespace std;const int inf=0x3f3f3f3f;const int maxv=1005,maxe=10000;int nu原创 2014-08-15 09:43:45 · 1094 阅读 · 0 评论 -
hdu 3605 /状态合并最大流
题意:N个人去m个星球,给出n个人可以去哪些星球的01矩阵。求是否能满足所有人都去。(n到10万,m一看,起先一瞬间就建图,准备秒了,人向星球连边,直接最大流判断是否为n,提交超时。。。是啊,10W*10=100W条边,铁定超时。。后来经牛提示:注意,m#include#include#include#include#includeusing namespace std;c原创 2014-08-11 15:39:37 · 816 阅读 · 0 评论 -
hdu3549 flow
水水maxflow~,练练手#include#include#include#includeusing namespace std;const int MAXN=35,MAXE=1000*10;const int inf=0x3f3f3f3f;int e[MAXE][3];int head[MAXN];int nume=0;void adde(int i,int j,i原创 2015-03-20 16:28:34 · 682 阅读 · 0 评论 -
hdu 5045 费用流
滚动建图,最大费用流(每次只有就10个点的二分图)。复杂度,m/n*(n^2)(n#include //78ms#include #includeusing namespace std;const double inf =0x3f3f3f3f;const int maxv=50,maxe=500;int head[maxv];double e[maxe][4];int nume=0原创 2014-10-03 16:20:39 · 1010 阅读 · 0 评论 -
hdu 5076 最小割灵活的运用
题意比较复杂,其实关键是抽象出来:每个点,可以赋予俩个值(二选一,必需选一个,设ai,bi)。 求所有之和最大,有条件:若俩个点同时满足:1,:点的二进制只有一位不同。 2:至少有一个是选B值; 则可获得对应加成。这题开始想了半天,建图遇到问题,看了官方说是最小割,于是入手:a值就是小于阈值的最大值,B值就是大于等于的最大值。思路:俩个点选其一,必然想到建二分(每个点一分为二)原创 2014-10-28 20:16:24 · 1305 阅读 · 0 评论 -
hdu4780 费用流 (机器任务工作不中断问题)
机器,任务 ,每个任务有有时间,不可中断。题意:m个机器,n个糖果要加工,给出每个糖果的工作时间(s,t),以及糖果之间、机器预备时间以及费用,求最小费用。这题开始受原来可以时间中断那题影响,开始用时间建图,巨麻烦,后来学习了,才觉悟时间只是计算费用的,没有帮毛钱关系, s-->机器-》糖果-》t;因为要每个糖果都加工一次,糖果拆点,必经过(-inf)。有一个没过,则无解。网上的添原创 2014-09-01 17:34:16 · 947 阅读 · 0 评论 -
hdu 3061 hdu 3996 最大权闭合图 最后一斩
hdu 3061 Battle :一看就是明显的最大权闭合图了,水提。。。。。。SB题也不说边数多少。。。。因为开始时候数组开小了,WA。。。。后来一气之下,开到100W,A了。。hdu3996. gold mine。。看了一下,简单题,几乎裸,不敲了。。#include//Battle#include#include#include#include#inclu原创 2014-08-15 21:12:55 · 891 阅读 · 0 评论 -
网络流专题练习题
转自夏天的风:http://blog.csdn.net/shahdza/article/details/7779537【HDU】1532Drainage Ditches(入门) [最大流]3549 Flow Problem(入门) [最大流]3572 Task Schedule(基础) [最大流]任务分配,判断满流2732 Leapin' Liza转载 2014-07-28 14:45:43 · 1335 阅读 · 3 评论 -
hdu 3879 hdu 3917 构造最大权闭合图 俩经典题
hdu3879 base station : 各一个无向图,点的权是负的,边的权是正的。自己建一个子图,使得获利最大。一看,就感觉按最大密度子图的构想:选了边那么连接的俩端点必需选,于是就以边做点,轻轻松松构造了最大权闭合图。简单题。分分钟搞定。hdu3917 :road constructions :这题题目看了半天没理解。。。感觉描述的不好。。。一个有向图,每条路有响应公司原创 2014-08-15 20:18:39 · 901 阅读 · 0 评论 -
hdu4240 求一条流量最大的路/(此题网上百分之90以上算法是错误的)
题意:求最大流/一条流量最大的路的流量。(此题HDU上数据水。)思路1;每次增广的时候更新流量,保存最大的那条。 错误性:每次更新,有可能最大的那条流量是前几次已经增广过的(每次是增广多条的),使得最大的那条被分解了。网上有20%代码是这样的。(下面的第数据2,3不过了)思路2:每次增广的时候,更新当前每条边的容量的最值。貌似可以,错误性:最大流量也有可能被分流击杀(数据4)。我的解原创 2014-08-13 11:32:41 · 934 阅读 · 0 评论 -
hdu 3657 最小割的活用 / 奇偶方格取数类经典题 /最小割
题意:方格取数,如果取了相邻的数,那么要付出一定代价。(代价为2*(X&Y))(开始用费用流,敲升级版3820,跪。。。) 建图: 对于相邻问题,经典方法:奇偶建立二分图。对于相邻两点连边2*(X&Y),源->X连边,Y->汇连边,权值w为点权。 ans=总点权-最小割:如果割边是源->X,表示x不要选(是割边,必然价值在路径上最小),若割边是Y-汇点,同理;若割边是X->Y,原创 2014-08-14 22:10:25 · 889 阅读 · 0 评论 -
hdu3315 /最大权最佳匹配(最大权下尽量不改变次序)(有权田忌赛马类问题)/费用流
题意:2个人比赛,每场比赛有得分,每场每人派一支圣兽( brute ,字典翻译为畜生,感觉这里不太符╮(╯▽╰)╭),有攻击力和血条。。。一堆规则。。。合理安排,让1号人获得最大分数,并尽量不要改变原来出场顺序(1,2,3.。。n),并求出相似度(没改变的场数/n)思路:显然建二分图,赢的话就连负边,输就是正边,x->y,,再跑 s->t费用流,按题意关键是如何在最大费用情况下,尽量流 i原创 2014-07-29 17:17:25 · 929 阅读 · 0 评论 -
hdu 3667 /2010哈尔滨赛区H题 费用与流量为非线性关系/费用流
题意: 在一般费用流题目修改:路过某路,每x单位流量需要花费 ai*x^2(ai为给定的系数)。开始的的时候,一看只不过是最后统计费用上在修改罢了,一看样例,发现根本没那么简单(ps:以后每次敲代码前先看样例能不能过!),因为是成平方关系,每次一流量增广的话,下次未必最优!于是想到我每次只增长一个单位流量!每次增长一个单位之后,该路径上的所有边的费用边改为i^2-(i-1)^2,(第一次肯定增原创 2014-07-29 10:32:11 · 1135 阅读 · 0 评论 -
1.飞行员配对 二分图匹配(输出方案)/最大流斩
构建二分图,新建超级源汇点,所有边权为1,跑一次dinic,最大流即可最大匹配,关键是方案输出,遍历所有边(除去关于s,t的边),满流的边即可一组匹配。#include#include#includeusing namespace std;int n,m;int nume;int e[10000][3];int head[105];const int inf=0x3f3f3f3f;原创 2014-03-11 15:17:13 · 1171 阅读 · 1 评论 -
hdu3491最小割转最大流+拆点
题意:求最小割,即求最大流即可。此题之关键为拆点(限制在点),每条边都是双向边,注意一下。未1A原因:在拆点之后添加边的过程中,要注意,出去的是i`,进来的是i,!!所以,写addegde函数时候还是每次添加一单项边就好,之后手动调用,可以注意出入之边即可。简单题。#include//15ms#include#includeusing namespace std;int原创 2014-03-06 17:07:25 · 872 阅读 · 0 评论 -
hdu3987,最小割时求最少割边数
题意:求最小割时候割边最少的数量。算法:先求dinic一遍,跑出残网络,再把该网络中满流量(残量为0)的边残量改为1,其他边残量改为无穷,则再跑一次最大流,所得即为答案。(思,最小割有喝多组,但是要割边数量最少的,那么把满流的流量改为1,再跑一次最大流即可)。未1A原因:1*:添加边的时候,把双向边添加为一条(反向的流量上限==正向),这样不是不可以,但是由于后面用到要取有效边原创 2014-03-06 15:58:31 · 1342 阅读 · 0 评论 -
POJ 2396 有源有汇有上下界可行流问题
题意:给一个矩阵,给出每行每列之和,附加一些条件,如第i行第j列数必需大于(小于)多少。思路题解:矩阵模型,模拟网络流,行、列标号为结点,构图,附加s,t,s连行标(容量上下限每行之和(必需以这个值全部送过去),每个列标连向t(容量上下限每列之和)),其他每个行到列都有边(有限制的按限制来,无限制的自己添加)。由于s->网络->t,若有解,总流量f必为矩阵所有数之和,故添加边t-S原创 2014-03-02 10:57:49 · 934 阅读 · 2 评论 -
SGU 194 无源无汇可行流求解
题意:n个点,m条边,每条边有容量限制 l--c,每个点满足容量平衡(流入等于流出),求可行解无源无汇可行流问题,建立以一个超级源点和超级汇点,由于原来最大流问题时候,流量下界其实为0,所以要转化,把边(设u-->v)的容量改为c-l,但是这样不平衡了,所以S流入v点l,u点流出到T要l,这样保证了u,v流量平衡,用数组sumin[i]记录下i点流入下限之和,最后超级源点流入i。最原创 2014-02-27 16:43:13 · 900 阅读 · 0 评论 -
有上下界网络流问题
转自:http://www.cnblogs.com/kane0526/archive/2013/04/05/3001108.html此类问题可以分为三小类问题:一、无源汇有上下界最大流二、有源汇有上下界最大流三、有源汇有上下界最小流 1、无源汇有上下界最大流 题目链接: sgu194 Reactor Cooling 题目大意:给n个点转载 2014-02-27 10:52:58 · 803 阅读 · 0 评论 -
POJ 2391 多源多汇拆点最大流 +flody+二分答案
题意:在一图中,每个点有俩个属性:现在牛的数量和雨棚大小(下雨时能容纳牛的数量),每个点之间有距离,给出牛(速度一样)在顶点之间移动所需时间,问最少时间内所有牛都能避雨。模型分析:多源点去多汇点(此题源点也可能是汇点(源汇同点)),所以我的方法是:建立超级源点和超级汇点,超级源点连想所有点,容量为该店本来的牛数量,在把各点拆成如图(略丑),到汇点的容量分别为避雨容纳量,点点之间容量原创 2014-02-24 22:10:33 · 1761 阅读 · 0 评论 -
poj2112 二分+floyd+多源多汇最大流
/*此题不错,大致题意:c头牛去k个机器处喝奶,每个喝奶处最多容纳M头牛,求所有牛中走的最长路的那头牛,使该最长路最小。思路:最大最小问题,第一灵感:二分答案check之。对于使最长路最短,用folyd算出所有牛到每个喝奶点的最短路,每次枚举最大值,取不大于该值的路,重新构图;把所有牛赶去喝奶点,在喝奶点有限制,不是多源多汇吗?!取超级源点,限制为1(一头牛),超级汇点,限制为m,原创 2014-02-23 18:52:56 · 1355 阅读 · 0 评论 -
poj1459多源多汇最大流问题
/*基本构图题,多源多汇,添加一个源点和一个汇点,所有源点都来自这个源点,同理,所有汇点都汇于这个汇点,dinic第二战,本来应该1A的,犯了一个低级错误!while(scanf("%d))要加“~”啊!SB了,记住这个教训!此次顺带学习了scanf的又一读入,忽略空格和已有符号,不错,并且更加了解了dinic算法(为什么要添加反向弧?反向弧其实是提供悔棋的机会(每次回走相当于原来的流原创 2014-02-22 20:19:06 · 1522 阅读 · 0 评论 -
hdu1569 方格取数 求最大点权独立集
题意:一个方格n*m,取出一些点,要求两两不相邻,求最大和。思路:建图,相邻的点有一条边,则建立了一个二分图,求最大点权独立集(所取点两两无公共边,权值和最大),问题转化为求总权和-最小点权覆盖集(点集I覆盖所有边,点权之和最小),(对应于原题,就是求拿掉最小点集,这些点覆盖所有边,拿掉后,每个点必然两两不相邻,否则:假设u,v相邻,则u->v这条边未被覆盖,矛盾),在建立超级源汇点s,t,s连向原创 2014-03-08 12:07:30 · 1007 阅读 · 2 评论 -
最大独立集 最小点覆盖 最小边覆盖 最小路径覆盖 最大团
最小边覆盖 = 最大独立集 = |V| - 最大匹配数这个是在原图是二分图上进行的最小路径覆盖和最小边覆盖不同,不要求给的图是二分图,而是要求是N x N的有向图,不能有环,然后根据原图构造二分图,构造方法是将点一分为二,如,i分为i1和i2然后如果i和j有边,那么就在i1和j2之间连一条边。由此构成二分图然后最小路径覆盖 = n-m,n为原图的点的个数,m为新造二分图转载 2014-03-08 09:43:03 · 955 阅读 · 0 评论 -
poj1149最大流经典构图神题
题意:n个顾客依次来买猪,有n个猪房,每个顾客每次可以开若干个房子,买完时,店主可以调整这位顾客开的猪房里的猪,共m个猪房,每个猪房有若干猪,求最多能卖多少猪。构图思想:顾客有先后,每个人想要的猪数量已经确定,显然要建汇点t,每个顾客连线t(以顾客为结点),权值为他想要买的猪数量(最多想要的都卖了,最大流之归宿,必思汇点!)然后,你想,每个顾客有先后顺序,前一个顾客开过的房原创 2014-03-08 20:36:36 · 829 阅读 · 0 评论 -
hdu2448 / 费用流 / harbin赛区c题
题(自)目(己)错(英)综(语)复(太)杂(差),关系理了半小时+翻译才看明白,看明白之后,直接建图,费用流击杀。/简单题。2A:有的地方,可用互通的要建双向边!#include#include#include#include#includeusing namespace std;const int maxv=400;const int maxe=400*400*2+800;原创 2014-08-02 10:14:26 · 1113 阅读 · 0 评论 -
hdu4888 多校B 最大流以及最大流唯一判断+输出方案
题意,给一个矩阵,告诉你每行和、每列和,并且限制所填数不大于k,问矩阵是否唯一。经典建图不说了,第一次遇到判断最大流唯一性的,学习了:用dfs来判断残网中是否还存在环,若存在,则表明绕这个环走一圈,(流一圈流量),还是最大流保持不变,说明还有解。输出方案就EASY了。WA了一天:第一TLE,因为这题卡DINIC,我的没有优化,后来在zz1215学长加了一行代码,在增广的时候,若发现最小总流原创 2014-08-01 14:59:09 · 1470 阅读 · 2 评论 -
hdu1853/ hdu 3488 有向图,取k个圈覆盖所有点一次//费用流
哎╮(╯▽╰)╭,这是费用流基础题型,拆点,建二分图,跑最小费用最大流即可。若最大流为n,则说明是最大匹配为n,所有点都参与,每个点的入度和出度又是1,所以就是环。弱菜还需努力!#include#include#include#includeusing namespace std;const int inf=0x3f3f3f3f;int nume=0;int e[500原创 2014-07-28 14:40:36 · 1254 阅读 · 5 评论 -
hdu4862 2014多校B题/ 费用流(最优情况下用不大于K条路径覆盖)(不同的解法)
题意: 一个数字矩阵,可以出发K次,每次可以从右边或者下面走,要求(在收益最大情况下)覆盖全图,不能则输出-1。(规则:每次跳一步的时候若格子数字相等则获得该数字的能量,每跳一步消耗距离的能量)。每个格子走且仅能走一次。选 显然用拆点为二分图。一种解法:边(流量,费用) 源点向X部连边(1,0)Y部向汇点连边(1,0)X到Y,若能到,则有边(1,消耗-获得)。原创 2014-07-24 19:49:25 · 1040 阅读 · 0 评论