
网络流
文章平均质量分 51
网络流(最小割,费用流题目汇总)
CR1SceNT
这个作者很懒,什么都没留下…
展开
-
BZOJ4177: Mike的农场
BZOJ4177MDMD考的时候还想半天,这TMTM不就是文理分科吗。真的sbsb了。赶紧退役算了。。 SS向nn个点连边(S,i,ai)(S,i,a_i) nn个点向TT连边(i,T,bi)(i,T,b_i) 对于mm每条规则(i,j,k)(i,j,k),连边(i,j,k)(i,j,k)和(j,i,k)(j,i,k) kk个额外收益,如果是都取aa获得收益,就建新点,SS连向新点,然后该点原创 2017-06-16 10:06:34 · 705 阅读 · 0 评论 -
BZOJ4514: [Sdoi2016]数字配对
BZOJ4514看到题目很容易发现是最大费用最大流。 关键点就是如何分成二分图。 (QAQQAQ涨姿势了) 把每个aa分解质因数: a=∏pixia=\prod {p_i}^{x_i} 记Numi=∑xNum_i=\sum x那么可以发现可以根据NumiNum_i的奇偶性构造二分图。 然后正常建图。若NumiNum_i为奇数,连边(S,i,bi,0)(S,i,b_i,0),否则连边(i,原创 2017-06-10 16:22:23 · 844 阅读 · 0 评论 -
BZOJ4873: [Shoi2017]寿司餐厅
BZOJ4873。。感觉网络流题目做的也不少了。。可是拿到了还是不会QAQQAQ 一开始把mx2+cxmx^2+cx的xx看成了取的该种寿司的个数。。。 所求答案是获得的美味度之和减去花费。可以联想到最大权闭合子图。 然后考虑一下依赖关系。 首先可以想到源向每个区间连边,边权为Di,jD_{i,j},这是收益。 在考虑花费,每一种寿司向汇连边,花费应该是mx2+cxmx^2+cx,可是这个原创 2017-06-08 14:16:02 · 848 阅读 · 0 评论 -
BZOJ2521: [Shoi2010]最小生成树
BZOJ2521QAQ一开始看到这个题就想到了BZOJ2561 然而瞬间否定,这两个题应该不太一样。神flag!flag! 先说说一开始错的想法错在哪吧。。 可以直接passpass: (一开始想的是类似次小生成树的做法,先做最小生成树,排序时若有多个边长与z[lab]相同的边,把lab放到最后,然后MST,如果边lab没出现,直接返回。然而发现这样还是有可能有其他解使得不考虑边lab,MS原创 2017-05-29 11:00:29 · 904 阅读 · 0 评论 -
BZOJ1391: [Ceoi2008]order
[Ceoi2008]orderDescription有N个工作,M种机器,每种机器你可以租或者买过来. 每个工作包括若干道工序,每道工序需要某种机器来完成,你可以通过购买或租用机器来完成。 现在给出这些参数,求最大利润。构图方法若不考虑租借,则是裸最大权闭合子图。那么这题就需要考虑如何修改建图方式,使得“可以选x的时候可以不选y,但要付出一定代价”。只需将中间相邻的边权为INF的边,容量改为原创 2016-12-19 15:04:03 · 479 阅读 · 0 评论 -
BZOJ2132: 圈地计划
题目链接【题目】Description最近房地产商GDOI(Group of Dumbbells Or Idiots)从NOI(Nuts Old Idiots)手中得到了一块开发土地。据了解,这块土地是一块矩形的区域,可以纵横划分为N×M块小区域。GDOI要求将这些区域分为商业区和工业区来开发。根据不同的地形环境,每块小区域建造商业区和工业区能取得不同的经济价值。更具体点,对于第i行第j列的区域,原创 2016-12-19 16:18:42 · 364 阅读 · 0 评论 -
BZOJ3894: 文理分科
题目链接【分析】很显然的最小割。首先很容易想到将文理分成两个集合构图。但是一开始一直没出具体方法,看网上大神题解也不太理解。还好身边有位大爷抬了我一手,也让我对最小割有了更深刻的理解。如果某个集合内的人都学文会获得一个满意度,那么就新加一个点,将集合内的所有人向这个点连流量为正无穷的边,再从这个点向T连一条流量为都选理满意度的边,表示集合内任意一个人学理都要把这个点与T的边割掉。可能不太好理解原创 2016-12-19 19:45:58 · 601 阅读 · 0 评论 -
BZOJ2127: happiness
题目链接同BZOJ3894。。。 具体见BZOJ3894【代码】#include <cstdio>#include <iostream>#include <queue>#include <vector>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#define N 50005#defi原创 2016-12-19 20:50:28 · 411 阅读 · 0 评论 -
BZOJ1532: [POI2005]Kos-Dicing
题目链接【分析】二分网络流,一眼题。自己蠢蠢的开小数组贡献两次WA~【建图】二分答案S向每场比赛连边,容量1;每场比赛向参赛双方连边,容量1;每个人向T连边,容量mid(二分值);【代码】#include <cstdio>#include <iostream>#include <queue>#include <vector>#include <algorithm>#includ原创 2016-12-20 09:55:04 · 430 阅读 · 0 评论 -
BZOJ2561: 最小生成树
题目链接【分析】刚开始可能难以下手,先只考虑最小生成树。 要使新加的边【代码】#include <cstdio>#include <iostream>#include <queue>#include <vector>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#define N 2000原创 2016-12-20 10:55:54 · 540 阅读 · 0 评论 -
BZOJ1324: Exca王者之剑
题目链接【分析】很容易发现,若可以移动,则每次不会选择原地不动。所以,偶数秒时,拿走宝石,四周的消失,奇数秒时,移动到没有宝石的格子。即相邻格子最终无法同时取到。所以就是方格取数问题,最小割解决。【建图】黑白染色,S向黑格连边,流量为点权值;白格向T连边,流量为点权值;黑格向四周白格连边,流量INF;【代码】#include <cstdio>#include <iostream>#inc原创 2016-12-20 11:32:04 · 426 阅读 · 0 评论 -
BZOJ3158: 千钧一发
题目链接【分析】某两样物品之间若满足某些条件则无法同时获取,显然最小割。 这个题其实和BZOJ3275几乎相同。。。【建图】我刚开始蠢蠢的做法,还是拆点,对于点x,S向x’连边,流量b[i],x”向T连边,流量为b[i],对于每一对不能同时取得点i,j,连边i’–>j”,j’–>i”,流量均为INF。答案=(∑b[i]*2-最小割)/2。看完大神的做法,简直觉得自己low爆了。 可以证明,原创 2016-12-20 12:06:50 · 1338 阅读 · 0 评论 -
BZOJ1565: [NOI2009]植物大战僵尸
题目链接【题目大意】给定n*m大小的地图,每块有一种植物,每种植物两个功能: ①:吃掉该植物可获得x点收益,可正可负; ②:可保护若干块地上的植物。 任何一个点的植物存活时,它左侧的所有植物都无法被攻击。 求最大获利值。【分析】由题意易知,想获得某点的植物的收益,可能有先决条件并且该条件必须满足,即为最大权闭合图。 但此题有特殊的情况:环。当出现环时,环上任意一点都不可原创 2016-12-20 15:38:51 · 387 阅读 · 0 评论 -
BZOJ3144: [Hnoi2013]切糕
题目链接【题目大意】给定三维矩阵,每一纵轴上取一点,且相邻两纵轴上取得点层数之差不大于D。刚开始也无从下手,我也是看了别人的题解才略懂一二:http://blog.youkuaiyun.com/zarxdy34/article/details/45272055接下来说一些我自己的理解。【分析】若这题没有D的限制,那就是每个纵轴上取一个最小值求和。。 加入限制条件后,就需要用最小割的思想来构建出这种相互制约的模原创 2016-12-20 20:35:42 · 300 阅读 · 0 评论 -
BZOJ1797: [Ahoi2009]Mincut 最小割
题目链接【分析】刚这个题刚了一早上,终于懂了一些。 结论: 在残量网络中跑tarjan后,对每条满流边(u,v): ①(u,v)能够出现在某个最小割集中,当且仅当Belong[u]!=Belong[v]; ②(u,v)必定出现在最小割集中,当且仅当Belong[u]==Belong[S ]且Belong[v]==Belong[T]。为什么呢? 先说②:这代表从S–>u有通路,v–>T有通路原创 2016-12-21 10:46:33 · 407 阅读 · 0 评论 -
BZOJ3996: [TJOI2015]线性代数
题目链接【分析】一开始看到转置我就mengbi了。。哎还是太弱了~ 设A为m×n阶矩阵(即m行n列),第i 行j 列的元素是a(i,j),即:A=a(i,j) 定义A的转置为这样一个n×m阶矩阵B,满足B=a(j,i),即 b (i,j)=a (j,i)(B的第i行第j列元素是A的第j行第i列元素),记A’=B。(有些书记为AT=B,这里T为A的上标) 直观来看,将A的所有元素绕着一原创 2016-12-21 11:52:07 · 343 阅读 · 0 评论 -
BZOJ1834: [ZJOI2010]network 网络扩容
题目链接【分析】刚看到这道题。想了想。哇,我好像会做~ 第一问直接最大流。第二问,在残量网络中重新建图: 对于剩余流量不足K的边(x,y),建新边,流量为K-W[i],费用为C[i]。对于剩余流量不为0的边,建新边,流量为W[i],费用为0。为什么这样建呢? 自己YY的是:每条边再流过的流量最多为K,则对于每条边,可流的流量不需要费用,不足的流量就补齐,有费用。 然而理想很美好,现实很骨感。原创 2016-12-21 18:17:04 · 379 阅读 · 0 评论 -
BZOJ1877: [SDOI2009]晨跑
题目链接【分析】一个点只能经过一次?–> 拆点! 两个约束条件,既要天数长又要路程短?–>费用流!然后就将点i拆为点i’和i”。i’–>i”建边,流量为1,费用为0,限制这个点只能走一次。对于每条边 (x,y,z) x”–>y’,流量为1,费用为z,代表该边只能走一次,代价为z。再建立超级源超级汇,S向1’连边,流量为INF,费用为0,n”向T连边,流量为INF,费用为0。流量就为最长周期原创 2016-12-21 19:51:25 · 351 阅读 · 0 评论 -
BZOJ1221: [HNOI2001] 软件开发
题目链接【分析】和餐巾计划基本相同。【建模】拆点,每个点x拆为x’和x”。S向每个点x’建边,容量为n[i],费用为0。表示当天用了n[i]。每个x”向T建边,容量为n[i],费用为0。表示当天需要n[i]。S向每个点x’’建边,容量为INF,费用为f。表示当天通过购买来获得毛巾。每个点x’向(x+1)’建边,容量为INF,费用为0。表示当天用完的毛巾留到下一天处理。若x+a+1<=n,建原创 2016-12-22 10:19:23 · 725 阅读 · 0 评论 -
BZOJ2424: [HAOI2010]订货
题目链接【分析】。。大水题。。【建模】S到每个点建边,流量为INF,费用为di。表示当月可以通过购买获得产品。每个点到T建边,流量为Ui,费用为0。表示当月需求量为Ui。对于每个小于n的点i,向i+1建边,流量为S,费用为m。代表当月可储存S, 花费为m。费用流值就是答案。【代码】#include <cstdio>#include <iostream>#include <queue>#原创 2016-12-22 11:00:18 · 444 阅读 · 0 评论 -
BZOJ3171: [Tjoi2013]循环格
题目链接【分析】题目可以抽象为,最少修改几个点指向的边,可以使每个点都处于一个简单环中。为什么一定是简单环呢?因为很显然每个点出度一定为1,所以所成环一定为简单环。那么这样就好做了。【建图】拆点。 1. 每个点x’向四周的点y”连边,流量为1,若指向的点为原先的方向,则费用为0,其他的费用为1。 2. S向每个点x’连边,流量为1,费用为0。 3. 每个点x”向T连边,流量为1,费用为0原创 2016-12-22 11:29:08 · 375 阅读 · 0 评论 -
BZOJ2245: [SDOI2011]工作安排
题目链接【分析】先吐槽:题目读的真的烦。。刚开始理解错了题意算出来答案怎么都不对还不知道哪里错了。。中午回家才想出来。。真的是勺的掺。其实这个题还是很裸的费用流。。看懂题就好。【建图】S向每个产品建边,流量为Ci,费用为0.每个员工向T建Si+1条边,流量为t[i][j]-t[i][j-1],费用为w[i][j]。为了方便,可以直接将t[i][si+1]赋为INF。有关系的产品和员工之间建边,原创 2016-12-22 14:19:19 · 339 阅读 · 0 评论 -
BZOJ1070: [SCOI2007]修车
题目链接【分析】直接做好像不太容易,那先考虑每个人修车对答案的贡献。假设第i个顾客到第j名技术人员修车。只会对第i名顾客和这名顾客之后的在第j名技术人员处修车的顾客造成影响。【建图】这样的话,我们就可以将技术人员拆点,每个技术人员拆为n个点。 假设这是第x个人,那么xi表示第x人修倒数第i辆车。S向每个顾客连边,容量为1,费用为0.技术人员拆成的n*m个点,分别向T连边,容量为1,费用为0.原创 2016-12-22 15:31:52 · 309 阅读 · 0 评论 -
BZOJ2879: [Noi2012]美食节
题目链接【分析】这题是【BZOJ1070修车】的加强版。 若仍正常建边的话,会T。那就想如何优化。 费用流中每次增广,只增广一条最短的道路,及对应一名厨师做一道菜。而每次又找的最短的,所以倒数第k次一定比倒数第k+1次先找到。得到了这个信息,就可以动态加边来解决了。【建图】S向每种菜品连边,流量为pi,费用为0。令P=∑pi,将厨师拆为m*P个点,分别向T连边,流量为1,费用为0。最开始将原创 2016-12-22 16:52:16 · 348 阅读 · 0 评论 -
BZOJ3280: 小R的烦恼
题目链接【分析】(不想看bb的直接略过) 读完题,诶,这和餐巾计划很像。 然后就乱搞乱搞。。画了几张图,把样例混出来了! 很开心的交掉。WA!?我口胡错了么。。回头查,很好。∑ai没有清零。。再交,WA!!?又查。。很好很好,算的流量也没有清零。然后就,A掉了!!!?【建图】拆点,每一天x拆为x’和x”。S向x’连边,流量为ai,费用为0。x”向T连边,流量为ai,费用为0。x’向(x+1)原创 2016-12-22 19:14:42 · 354 阅读 · 0 评论 -
BZOJ1061: [Noi2008]志愿者招募
题目链接题解: https://www.byvoid.com/blog/noi-2008-employee/【代码】#include <cstdio>#include <iostream>#include <queue>#include <vector>#include <algorithm>#include <cstring>#include <cmath>#include <原创 2016-12-23 09:02:51 · 232 阅读 · 0 评论 -
BZOJ【bzoj2661】[BeiJing wc2012]连连看
题目链接【分析】题目要求“消除的数对尽可能多的前提下,得到足够的分数”,那就可以想到最大费用最大流解决。 一个点显然只能用一次,所以要拆点。若对满足题目要求的x,y,只是由x’–>y”的话,就会出现问题:某些点可能会选到两次。这个并没有限制住。 如何解决呢?我们同时也发现,一个点最多被选两次,那么若再从y’–>x”连边,也就相当于将答案扩大两倍。 为什么一定正确呢?每次增广是按增光路径的长度找原创 2016-12-23 09:39:50 · 498 阅读 · 0 评论 -
BZOJ1930: [Shoi2003]pacman 吃豆豆
题目链接【分析】很容易想到最大费用最大流。 但是蒟蒻只会打暴力直接被卡掉。。 那就想如何优化。暴力建图中对于每个(x[i]>=x[j]&&y[i]>=y[j])都建了边。那么数据中如果两千个点(i,i)。被卡的没脾气。 然后发现对于i能到j且j能到k,则为了利益最大化,不会直接从i到k。那么就加入这条剪枝。 还要考虑另外一个问题。一个点可能走2次,所以再加入一条边x’–>x”,流量为1,费用原创 2016-12-23 11:01:18 · 442 阅读 · 0 评论 -
BZOJ2324: [ZJOI2011]营救皮卡丘
题目链接(很烦,很燥。数组开小了调了我一个半小时。心态崩了)学习一下别人的建图:http://www.cnblogs.com/BLADEVIL/p/3473628.html【代码】#include <cstdio>#include <iostream>#include <queue>#include <vector>#include <algorithm>#include <cstring原创 2016-12-23 15:46:04 · 397 阅读 · 0 评论 -
BZOJ1520: [POI2006]Szk-Schools
题目链接【分析】费用流裸题。。【代码】#include <cstdio>#include <iostream>#include <queue>#include <vector>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#define N 405#define M 80805#def原创 2016-12-23 16:18:00 · 333 阅读 · 0 评论 -
BZOJ2893: 征服王
题目链接【分析】首先,第一步tarjan缩点还是很容易想到的。 一个点至少要经过一次,所以拆点,连两条边,第一条流量为1,费用为1,第二条流量为INF,费用为0。 连通块之间连边,流量为INF,费用为0。 若块x可作为起点,则由S–>x’连边,流量为INF,费用为0。若可作为终点,则由x”–>T连边,流量为INF,费用为0。 增广次数即为答案。(又是一道把我心态做崩的题。。一开始打成了每条边走一原创 2016-12-24 09:38:17 · 372 阅读 · 0 评论 -
BZOJ1449/2895: [JSOI2009]球队收益
BZOJ1449 BZOJ2895【分析】本题中无论输赢都会获得收益,所以按往常的费用流建图,不好完成。 那么我们先假设每场比赛双方全输,计算“初始答案”,然后对于每一场比赛,一方获胜,计算收益改变量。那么多赢一场,产生的收益为:(C*(w+1)^2+D*(l-1)^2)-(C*w^2+D*l^2)=2w*C-2l*D+C+D。每赢一次,w[i]++,l[i]–。初始答案+费用流值=最终答案。原创 2016-12-24 10:24:07 · 348 阅读 · 0 评论 -
BZOJ1927: [Sdoi2010]星际竞速
题目链接【分析】根据提议,类似于最小路径覆盖。不同的只有,对于每个点,可以由任意一个点花费一定代价,直接到达。【建图】拆点。S->x’,流量为1,费用为0。x”–>T,流量为1,费用为0。S–>x”,流量为INF,费用为a[x]。每条边(x,y,z),假设x编号较小,则x’–>y”连边,流量为1,费用为z。【代码】#include <cstdio>#include <iostream>#i原创 2016-12-24 11:11:11 · 274 阅读 · 0 评论 -
POJ2125:Destroying The Graph
题目链接【题意】给一张有向图,现在要选择一些点,删掉图中的所有边。具体操作为:选择点i,可 以选择删除从i 出发的所有有向边或者进入i 的所有有向边,分别有个代价ini 和 outi,求最小的代价删掉所有边。并输出删除方案。【分析】一条边不是被入点删掉,就是出点。就可以拆点构二分图,然后最小割。 方案? 考虑残量网络,从S做BFS,那么对于左侧被选中的点,就是level值为0,及由S连向它的原创 2017-01-22 23:23:20 · 354 阅读 · 0 评论 -
POJ3155:Hard Life
题目链接【题意】最大密度子图,并求方案。【分析】二分答案ans。 ans=sumE/sumV sumE-ans*sumV取最大值,若 >=0 就满足条件。 由于边和点有依赖关系,一条边依赖于两点,所以可转化为最大权闭合子图。 边为正权1,点为负权ans。判断(正权和-最小割)的正负。先吐槽:卡精度的题先S个M。刷了poj一页。最后XJB乱改乱搞莫名其妙才A了。【代码】#include <io原创 2017-01-22 23:36:56 · 321 阅读 · 0 评论 -
最小割基本模型及解决方案
最小割概念割:如果从图G中删除一个弧的集合c{f},让S流不到T,那么这个集合成为图G的一个割。记做C(S,T),S,T为点集。正向割边:对于集合c中的一条弧f{u,v}(u指向v)如果u∈S,v∈T则成为正向割边。逆向割边:对于集合c中的一条弧f{u,v}(u指向v)如果u∈T,v∈S则成为逆向割边。割的容量:割C{S,T}中所有正向割边的容量和称为割的容量。最小割:容量最小的割Ci{S原创 2016-12-19 12:04:07 · 2037 阅读 · 0 评论