![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
费用流
CR1SceNT
这个作者很懒,什么都没留下…
展开
-
BZOJ1834: [ZJOI2010]network 网络扩容
题目链接【分析】刚看到这道题。想了想。哇,我好像会做~ 第一问直接最大流。第二问,在残量网络中重新建图: 对于剩余流量不足K的边(x,y),建新边,流量为K-W[i],费用为C[i]。对于剩余流量不为0的边,建新边,流量为W[i],费用为0。为什么这样建呢? 自己YY的是:每条边再流过的流量最多为K,则对于每条边,可流的流量不需要费用,不足的流量就补齐,有费用。 然而理想很美好,现实很骨感。原创 2016-12-21 18:17:04 · 350 阅读 · 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 · 656 阅读 · 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 · 248 阅读 · 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 · 305 阅读 · 0 评论 -
BZOJ2893: 征服王
题目链接【分析】首先,第一步tarjan缩点还是很容易想到的。 一个点至少要经过一次,所以拆点,连两条边,第一条流量为1,费用为1,第二条流量为INF,费用为0。 连通块之间连边,流量为INF,费用为0。 若块x可作为起点,则由S–>x’连边,流量为INF,费用为0。若可作为终点,则由x”–>T连边,流量为INF,费用为0。 增广次数即为答案。(又是一道把我心态做崩的题。。一开始打成了每条边走一原创 2016-12-24 09:38:17 · 333 阅读 · 0 评论 -
BZOJ【bzoj2661】[BeiJing wc2012]连连看
题目链接【分析】题目要求“消除的数对尽可能多的前提下,得到足够的分数”,那就可以想到最大费用最大流解决。 一个点显然只能用一次,所以要拆点。若对满足题目要求的x,y,只是由x’–>y”的话,就会出现问题:某些点可能会选到两次。这个并没有限制住。 如何解决呢?我们同时也发现,一个点最多被选两次,那么若再从y’–>x”连边,也就相当于将答案扩大两倍。 为什么一定正确呢?每次增广是按增光路径的长度找原创 2016-12-23 09:39:50 · 466 阅读 · 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 · 296 阅读 · 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 · 362 阅读 · 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 · 404 阅读 · 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 · 213 阅读 · 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 · 322 阅读 · 0 评论 -
BZOJ2879: [Noi2012]美食节
题目链接【分析】这题是【BZOJ1070修车】的加强版。 若仍正常建边的话,会T。那就想如何优化。 费用流中每次增广,只增广一条最短的道路,及对应一名厨师做一道菜。而每次又找的最短的,所以倒数第k次一定比倒数第k+1次先找到。得到了这个信息,就可以动态加边来解决了。【建图】S向每种菜品连边,流量为pi,费用为0。令P=∑pi,将厨师拆为m*P个点,分别向T连边,流量为1,费用为0。最开始将原创 2016-12-22 16:52:16 · 314 阅读 · 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 · 285 阅读 · 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 · 296 阅读 · 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 · 417 阅读 · 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 · 339 阅读 · 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 · 314 阅读 · 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 · 803 阅读 · 0 评论