![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
网络流
yzyyylx
这个作者很懒,什么都没留下…
展开
-
洛谷 P2765 魔术球问题
题面题意有n个柱子,编号为1,2…….的小环,要将它们依次套在环上,要求直接接触的两小球的和为完全平方数,那么最多可以套几个小球。做法首先可以贪心,如果可以套在其他小球上,则套在其他小球上,反之,套在柱子上,直到没有多余柱子,可以证明这是对的,但我觉得还是网络流的做法比较重要。 因为要依次取小球,那么当答案为ans时,编号为1-ans的小球都被取走,我们可以用类似于洛谷 P1251 餐巾计划问题的原创 2018-03-12 23:49:25 · 294 阅读 · 0 评论 -
bzoj 2324: [ZJOI2011]营救皮卡丘
题面题意 有k个人从0点开始走,他们分开行动,要依此经过所有点,则最短距离是多少.做法 与洛谷 P1251 餐巾计划问题的做法相似. 首先所有点都必须要经过,因此我们可以看做一个人第一次到达i点时,直接到达超级汇点,又从超级源点流出到达i点,这样可以保证每个点都被经过,可以将每个点拆成两个,一个与汇点相连,一个与源点相连,流量均为1,费用为0. 为了保证依次经过,在弗洛伊德时,原创 2018-02-26 16:25:48 · 188 阅读 · 0 评论 -
洛谷 P2762 太空飞行计划问题
题面题意 去太空飞行时,可以花费一些钱带一些实验器材,带够一些实验器材可以做一个实验获得一定利润,问最大净利润.做法 与 洛谷 P3410 拍照相同,都是用最小割解最大权闭合图,但这题还要输出方案. 这道题不能根据边的剩余流量输出方案,因为剩余流量可能不为满流,也不为0,仅仅在满流为1时可以用这种方法输出流量. 正确做法是先求出最小割,然后依次去掉与每个器材相连的边,求一遍最小原创 2018-02-27 19:27:13 · 247 阅读 · 0 评论 -
洛谷 P3356 火星探险问题
题面题意 给出一张地图,上面有一些石块或障碍,现在有一些运载车从左上角出发,要去右下角,只能向右或向下走,每个石块只能收集一次,输出收集到最多石块的路径.做法 多个运载车,不难想到是网络流,但难点在于每个石块最多收集一次,而且要收集最多石块. 可以用费用流来做,每个点拆成两个入点向出点连一条流量为INF,费用为0的边,如果该地有石块,则再连一条流量为1,费用为-1的边,最后跑费用流,原创 2018-03-03 17:37:11 · 268 阅读 · 0 评论 -
洛谷 P3288 [SCOI2014]方伯伯运椰子
题面题意 给出一幅有向图,有一源点(仅一条边与之相连且这条边不可修改)和一汇点,每一条边有一个流量,单位流量所需费用,每额外增加单位流量所需费用和每减少一流量所需费用,给出的图保证所有所有边均满流,现在要修改一些边(改变流量),使修改后的所有边依然满流,且使修改后费用减少量除以修改流量之和的商最大.做法 可以将问题转化,减少边的流量相当于退流,增加边的流量相当于增广,因为与源点相连的边不可原创 2018-03-08 15:15:34 · 330 阅读 · 2 评论 -
BZOJ 1001: [BeiJing2006]狼抓兔子 求平面图的最小割
题面题意给出一幅无向平面图,求s到t的最小割. 对偶图:将原图中的每一块区域当作一个点,原图上的每一条边转化为这条边两边区域之间的一条边,任何只在顶点处有交点的图(平面图)都有对偶图.做法这道题如果直接跑最大流,复杂度显然不对,但因为它存在对偶图,我们可以将题目转化为求左下角这块到右上角这块的最短路,对于样例可以这么建图 首先建对偶图 之后去掉原图就可以得到 可以发现从0点到13点(原创 2018-04-23 10:59:51 · 186 阅读 · 0 评论 -
洛谷 P2711 小行星
题面题意给出n个三维空间中的点,每次可以消除三维中至少有一维相等的点,问至少几次可以消除所有点.做法首先想到的是dp,但是很难记录状态,然后考虑网络流,想对每个点间两个点记为a,b两点,对所有a点和它共面的点的b点都连一条边,然后跑费用流,但是建边的复杂度就高达O(n^2),不仅会T,还会M. 正确思路是要抓住x,y,z三维都小于等于500,这就意味着可以考虑对于数值大小来建图,可以将这题转化为最原创 2018-04-28 17:21:36 · 318 阅读 · 0 评论 -
BZOJ5120 [2017国家集训队测试]无限之环
题面题意给出一个网格图,每个格子内可能有一个水管,水管有15种形状,也就是说它向每个方向都有可能有分支,请问至少旋转(顺时针或逆时针90度)几个非直线型的水管,使没有水管漏水,即每个水管的每个分支都与其他的某个分支相连。做法算法是费用流,难点在于建图: 因为要求每个分支都与其他某个分支相连,因此就要使它满流,不难想到根据每个点横纵坐标和的奇偶性将它与源点或汇点相连,然后将...原创 2018-08-30 20:20:56 · 288 阅读 · 0 评论 -
[NOI2015]小园丁与老司机
题面题意给出n棵树,从原点开始,每次可以在左、右、上、左上 45∘、右上 45∘五个方向中选择一个,然后一直向这个方向走,直至走到一棵未经过的树,然后继续选择方向,直至5个方向都不存在未经过的树。 现在要经过尽可能多的树,输出最多可能经过的树的数量以及任意一条路径。 现在定义向上、左上 45∘、右上 45∘三个方向走形成的线段不优美,现在要覆盖所有最优路径中的不优美线段,每次从原点...原创 2018-08-29 17:26:10 · 457 阅读 · 0 评论 -
codeforces 1070I 2018-2019 ICPC,NEERC,Southern Subregional Contest Privatization of Roads in Berlan
题面题意给出一张无向图,现在要对上面的边进行染色(可以认为有无数种颜色),并且每种边只能染一种颜色,每种颜色最多只能染两条边,并且与每个点相连的边最多只有k种颜色,请输出一种方案。做法首先如果存在一个度数大于2k2k2k的点,肯定无解,而对于度数小于等于kkk的点,则无论其周围的边如何染色,都不会超过kkk个颜色,因此我们只要考虑度数在k+1k+1k+1与2k2k2k之间的点即可。可以发...原创 2018-10-24 17:59:27 · 422 阅读 · 0 评论 -
Codeforces 903G Yet Another Maxflow Problem
题面题意给出一张有向图,分为A,B两部分,每个部分都有n个点,其中AiA_iAi到Ai+1A_{i+1}Ai+1,BiB_iBi到Bi+1B_{i+1}Bi+1都有一条边,还有m条边从AiA_iAi连向BjB_jBj,每次修改给出ppp,qqq,将ApA_pAp到Ap+1A_{p+1}Ap+1的边的权值改为qqq,并询问从A1A_1A1到BnB_nBn的最大流。做法首先...原创 2018-12-21 19:29:39 · 218 阅读 · 0 评论 -
BZOJ 2768[JLOI2010]冠军调查
题面题意 n个人发表意见,每个人说1或0,有m对朋友,为了每个人可以为了朋友迁就自己,改变主意,求改变意见次数与和朋友意见不同的组数之和的最小值.做法 用最小割求解,将超级源点与说1的相连,说0的与超级汇点相连,朋友间连双向边,求最小割. 因为根据题意只有两种操作会是答案变大: 1.与朋友意见不同(去掉一条边). 2.改变意见(去掉与超级源点或超级汇点间的边) 因此原创 2018-02-24 16:41:11 · 185 阅读 · 0 评论 -
洛谷 P3410 拍照
题面题意 有n个人,选出一些人,有m种组合每种组合都有一定收益,但选人也有一定的花费,问最大收益.做法 这题可以用洛谷 P1361 小M的作物来做,也有简化的方法. 首先对每种方案,每个人都建一个点,之后每个方案点向它所需的人连一条边,每个点都有点权,要选出一些点,使其点权和最大.每一个合法方案都是一个闭合图(每一个点的出边都指向已选择的点),此题就转化为了求最大权闭合图. 最原创 2018-02-23 09:34:00 · 199 阅读 · 0 评论 -
洛谷 P1361 小M的作物
题面题意 有n个作物,A,B两块地,将它们种在A,B中的一块,每个作物种在两块地上分别有一个收益,有m种组合,若这个组合内的作物都在一块地内则有额外收益,求最大收益.做法 这题与洛谷 P3355 骑士共存问题有些相似,都是转化为最小割的问题. 首先假设每种作物均有两个,分别种在A,B上,现在要每种作物都要拔掉一个,那么在跑最大流时,有流量则代表这种做法不采用,最后用总收益减去最大流量原创 2018-02-22 20:16:08 · 536 阅读 · 0 评论 -
zkw费用流
作用最终流量较大, 而费用取值范围不大的图,或者是每次增广的路径段数较少(像二分图)的图普通的费用流相对较慢,因此可以采用在普通费用流上修改的zkw费用流来求解.做法对于普通费用流,因为每次增广后有一些边会因流量为0而导致一些点的最短路增大,但没有必要再跑一遍spfa. 在dfs增广的过程中,我们可以顺便求出哪些点的最短路并没有增大,也可以顺便求出那些最短路增大的点最少增大了多少,求出所有增大长度原创 2018-04-03 16:14:06 · 363 阅读 · 0 评论 -
最大流
含义 网络流,用于求一个源点到一个汇点的最大流量.方法1 EK 先用bfs求出最短路,并记录下路径,之后找到路径上的流量最小的边的流量路径,并且让每条边都减去这个最小值,让它的反向边加上这个值(给它后悔的机会),当无法再找到到达汇点的路径时结束,此时所有最小流量之和即为答案.代码#include<iostream>#include<cstdio>#include<cstring>#原创 2018-01-15 20:59:50 · 147 阅读 · 0 评论 -
洛谷 P2756 飞行员配对方案问题(最大流)
题面题意 给出m+n个数,1~m中有些数可以与后面n个数匹配,问最多有几组匹配方法.方法 这题看上去与网络流没有多大关系,但是可以加一个源点,一个汇点,源点向m个点都连一条权值为1的边,后面n个点每个向汇点连一条边,求最大流即可.代码#include<iostream>#include<cstdio>#include<cstring>#include<queue>#define原创 2018-01-16 08:01:36 · 625 阅读 · 0 评论 -
费用流
含义 每一条边还有一个费用,表示单位流量通过所需费用,要求在保持最大流时,使总费用最少.方法 在求最大流时,对增广进行修改,原来求边的数量最少,但因无论如何增广都可以求出最大流,因而每次增广可以用找最短路的方法求出总费用最少的路径,且反向边的费用为原来费用的相反数,因为反向边的权值为负,因而不能用迪杰斯提拉,但可以SPFA等来做.代码#include<iostream>#include原创 2018-01-19 11:58:56 · 296 阅读 · 0 评论 -
洛谷 P2153 [SDOI2009]晨跑
题面题意 给出一幅有向无环图,问从点1到点n有几条互相没有交点(除起点终点外不能有公共点)的路径,保证路径数量最多的情况下,路径最大数量与最短的路径长度之和是多少.分析 与费用流裸题不同的是,不能有公共点,解决方法是将每一个点拆为一个入点和一个出点,流量为1(起点终点不用拆或者流量为INF),建边时,从一个点的出点连向另外一点的入点,再跑一遍费用流即可.代码#include<iostre原创 2018-02-06 15:40:14 · 233 阅读 · 0 评论 -
洛谷 P2517 [HAOI2010]订货
题面题意 给出每一个月的商品需求量和每一个月的生产成本以及仓库容量和贮存费用(每月,与贮存货物的量无关),问最小成本.分析 一开始没有想到用费用流去做,且难以建图,但将名词转化一下即可 将货物的量当做流量,成本当做费用,先建一个超级源点(可以理解为工厂),连向每一个月的节点,因为生产数量无限制,故流量为INF,费用为成本,再建一个超级汇点(理解为客户),每一个月的节点连向它,流量为需原创 2018-02-06 16:39:09 · 210 阅读 · 0 评论 -
洛谷 P4016 负载平衡问题
题面题意 给出一个环上的仓库,每个仓库中有一些货物,每个仓库内的货物可以搬到相邻仓库,要使每个仓库的货物相等,至少要移动多少货物.方法 网络流的题目难于减图,无法在其中建出源点和汇点,但可以这样考虑,将每一个仓库与所有仓库货物的平均值比较,若货物过多,向超级源点连一条流量为多出货物,费用为0的边,若少于,向汇点连一条流量为缺少的货物,费用为0的边,再在相邻两个仓库间连流量无限,费用为1的边原创 2018-02-07 16:39:02 · 212 阅读 · 0 评论 -
洛谷 P1251 餐巾计划问题
题面题意 有一家餐馆,每天需要一些餐巾,用完之后都会变脏,有两个洗餐巾的地方,给出单价和需要天数(可以放入任意数量的餐巾),每天可以买一些餐巾,问最小费用.方法 这题建图主要难点是汇点无法确定,因为餐巾可以通过清洗再次使用,而不能像流量一样直接流向汇点. 解决方法是每天拆成两个节点,一个A点用于处理干净的餐巾,一个B点用于处理脏的餐巾,干净餐巾经过使用后变脏可以理解为干净餐巾从A流向原创 2018-02-07 19:55:35 · 263 阅读 · 0 评论 -
洛谷 P3358 最长k可重区间集问题
题面题意 在一条线上有n个开区间,现在要选择一些,使每个点最多被k个区间覆盖且开区间总长度(右端点减左端点)最大.方法 这题难与限制每个点的区间覆盖数,无法将最长长度转化为最大流,但可以通过最大费用流(将所有边的费用取反再跑一遍最小费用流)来做. 具体做法是相邻点连一条费用为0,流量为INF的边,区间两端点连一条费用为区间长度,流量为1的边,s到1与最右端点到t连一条费用为0,流量为原创 2018-02-10 08:53:29 · 299 阅读 · 0 评论 -
洛谷 P3355 骑士共存问题
题面题意 给出一张边长为n,有几个障碍点的棋盘,问最多可以放几个骑士使他们不互相攻击.做法 我们可以反过来考虑,先将棋盘放满骑士,计算至少去掉几个骑士. 经过观察,我们可以发现,相同颜色的格子上的棋子无法相互攻击,因此可以让超级源点连想每一个红点,每一个黄点连向超级汇点,流量均为一,表示将棋盘放满,再将红格子向可以攻击到的格子连一条边,流量为INF,如果有流量通过某个点,就说明这个点原创 2018-02-11 08:36:14 · 370 阅读 · 0 评论 -
codeforces1146G Zoning Restrictions
题面题意在一条路上有标号为1-n的n座房子,每座房子最高为h,若一座房子的高度为x,则这座房子的收益为x*x,有m条限制,每条限制表示如果在l-r之间的所有房子的最大高度超过hi,则罚款ci.问所有房子的最大收益是多少.做法一道经典的最小割.假设一开始所有房子的高度均为h,初始答案为n∗h∗hn*h*hn∗h∗h,可以对每座房子的每一种取值建一个点,并且这样连边S->0->1...原创 2019-05-07 07:31:18 · 341 阅读 · 0 评论