ACM-图论-网络流
暗金色
这个作者很懒,什么都没留下…
展开
-
ZOJ Problem Set - 2676 Network Wars(分数规划)
详见 胡伯涛的:算法合集之《最小割模型在信息学竞赛中的应用》#include <cstdio>#include <cstring>#include <algorithm>#include <vector>#include <queue>using namespace std;#define N 110#define INF 0x3f3f3f3f#define R 1000010co原创 2015-09-02 23:47:02 · 557 阅读 · 0 评论 -
POJ 3469 Dual Core CPU(最小割)
题目大意:一个双核CPU,假设分为A核和B核,这两个核处理一个任务所需要的花费不同,非别为Ai和Bi 现在有M个冲突,冲突表示如果两个任务在不同核执行完成的话,需要额外Wi的花费 问需要最少的花费是多少,才能使得所有任务都完成解题思路:最小割解决矛盾的问题,我们要解决的矛盾是 s->u…->v->t(表示冲突的边),需要将这些线路断开,且花费的代价最小,这就是最小割了 建图的话,点i连向源点原创 2015-09-04 20:35:58 · 341 阅读 · 0 评论 -
POJ 1149 PIGS(建模 + 最大流)
题目大意:有M个猪圈,N个顾客,顾客按时间顺序来买猪 已知每个顾客会开启K个猪圈,然后在里面挑选C头猪,挑选完之后,卖方可以调整那些开启的猪圈的猪的数量,然后猪圈关闭。 问最多可以卖出多少只猪解题思路:构图还是挺巧妙的。这是一个时序模型 首先,猪圈和源点相连,容量里面猪的数量 然后顾客和汇点相连,容量为顾客要买的猪的数量 接着顾客要开启的猪圈和顾客相连,容量为INF 剩下的关键是,怎么进原创 2015-09-04 16:56:19 · 396 阅读 · 0 评论 -
HDU - 3046 Pleasant sheep and big big wolf(最小割)
题目大意:给出一张地图,地图上面的0表示空地,1表示羊,2表示狼,现在要求你建围栏,使得所有的羊都不会被狼攻击,问至少需要建多少个围栏解题思路:最小割,狼和羊之间的联系就是s–>u….->v–>t(u表示狼,v表示羊),我们要做的就是断开这样的线路,且付出的代价最小,这就是最小割了 狼和源点相连接,容量为INF,羊和汇点相连接,容量为INF(刚开始弄成1了,1的话,就表示1头羊只能被一头狼攻击,这原创 2015-09-06 10:42:26 · 432 阅读 · 0 评论 -
HDU - 3081 Marriage Match II(二分+最大流)
题目大意:有N个女的和N个男的,他们在玩过家家的游戏,现在他们要进行匹配,匹配的规则如下 1.男女之间要匹配的话,必须要没吵过架 2.女的可以和她的朋友匹配过的人匹配 3.如果匹配过的话,就不能再匹配了 一次完美匹配算一轮游戏,问最多可以玩多少轮的游戏解题思路:二分匹配次数,然后跑最大流 建图如下,女的和源点相连,容量为枚举的次数 男的和汇点相连,容量为枚举的次数 能匹配的话,男女就连原创 2015-09-05 19:52:49 · 486 阅读 · 0 评论 -
POJ 3422 Kaka's Matrix Travels(模型转化 区间K覆盖问题)
题目大意:给出一个网格,每次的起点都是左上角,且只能往下或者往右走,终点是右下角,每走过一个格子,可以将该格子内的数拿走,格子内的数只能被拿走一次 问,走k次,拿到的数的总和的最大值是多少解题思路:将其转化为区间k覆盖问题,只能走k次,那么边权最多只能是k了 我是将点拆了,一条边是容量为1,费用为该格子的数的相反数 另一条边容量是k,费用为0 然后能连的格子连起来,这样图就建成了#inclu原创 2015-09-04 23:55:16 · 560 阅读 · 0 评论 -
POJ 2135 Farm Tour(费用流)
题目大意:有一个人要从点1出发,走到点n,然后再走回点1,其中不重复走同一条边,问走过的最短路是多少解题思路:用费用流做的话,费用就是边权了,而容量就是1了 因为是双向边,所以拆成两条有向边的费用都是边权 因为不能重复走,所以找到一条边后,要将另一条边的费用变为负值,这样重复走的话,就可以将以前的边给抵消了 这题还可以用最短路做,具体的我这篇博客有说到UVA - 10806 Dijkstra,原创 2015-09-04 19:31:26 · 395 阅读 · 0 评论 -
HDU - 3277 Marriage Match III(并查集+最大流)
题目大意:上一题的升级版 只不过加了个额外条件,女的可以挑选最多K个吵过架的人解题思路:既然多了个权利,那就让这个权利形成新的一个点 假设新的点设为i + 2 * n 女的点设为i,男的点设为i + n 如果女i可以选择男j,那么i和j + n连线,容量为1 如果女i和男j吵过架,那么i + 2 * n 和j+n连线,容量为1 有k个选择权利,那么i就和i + 2 * n连线,容量为k原创 2015-09-05 21:02:37 · 454 阅读 · 0 评论 -
POJ 3762 The Bonus Salary!(区间k覆盖问题)
题目大意:给出N个时间段,每个时间段都有其相应的收益。 限制条件是每个时刻最多只能被覆盖k次 问最多的收益是多少解题思路:和上一题的思路是一样的,这里就不详写了 给出传送门#include <cstdio>#include <cstring>#include <queue>#include <vector>#include <algorithm>using namespace std原创 2015-09-04 23:11:48 · 663 阅读 · 0 评论 -
HDU - 2883 kebab (最大流)
题目大意:有一个烤肉老板,每个单位时间可以完成M的烤肉 现在有N位客人,给出每位客人来的时间,走的时间,烤肉的数量和每串烤肉所需的单位时间 问这个老板能否完成每位客人的需求解题思路:这题和HDU 3572相似,但又不能像那题那样做,因为这题时间长度有点大 所以将时间区间当成一个点,将该区间连向超级汇点,容量为区间长度*M 将所有客人连向超级源点,容量为烤肉数量*每串烤肉所需时间 接下来的难原创 2015-08-04 00:15:29 · 750 阅读 · 0 评论 -
HDU - 3416 Marriage Match IV (最大流)
题目大意:有个人要从A城市去B城市,每条路只允许走一次,问能走几次最短路解题思路:这题的话,难点就是怎么知道是不是最短路了 首先,先求出到B最短路,这也顺便求出了所有点到B的最短距离 接着求出到A的最短路 这样就能得到两个数组了,假设d1[u]代表u节点到A城市的最短路d2[v]代表v节点到城市B的最短距离 如果满足d1[u] + dis[u][v] + d2[v] == d1[v]的话,那原创 2015-08-03 23:53:34 · 886 阅读 · 0 评论 -
HDU - 4289 Control (最小割 MCMF)
题目大意:有一个间谍要将一些机密文件送到目的地 现在给出间谍的初始位置和要去的目的地,要求你在间谍的必经路上将其拦获且费用最小解题思路:最小割最大流的应用,具体可以看网络流–最小割最大流建图的话 超级源点–起始城市,容量为INF 城市拆成两点(u, v),容量为监视该城市的代价 能连通的城市连接,容量为INF 目的地和超级汇点相连,容量为INF#include <cstdio>#incl原创 2015-08-03 15:54:42 · 507 阅读 · 0 评论 -
POJ - 2516 Minimum Cost (MCMF)
题目大意:有n间商店,m个货源,k种商品 现在给出每间商店所需的商品个数和每个货源能提供的商品数量,和货源运输货物到商店的代价 问能否满足所有商店的需求,且代价最小解题思路:每种商品的运输是是不相关的,所以可以将每种商品的运输分离出来求 超级源点—货源,容量为供货量,代价为0 货源—商店,容量为INF,代价为运输代价 商店—超级汇点,容量为需求量,代价为0每次进行判断,如果不能满足的话,直原创 2015-08-03 15:43:42 · 526 阅读 · 0 评论 -
HDU - 4280 Island Transport(ISAP)
题目大意:要求你将游客从最东边送到最西边,反正边是双向的,没有差别了解题思路:裸流ISAP 8080MS#include <cstdio>#include <cstring>#include <algorithm>#include <vector>#include <queue>using namespace std;#define N 100010#define INF 0x3f3f原创 2015-08-03 00:12:17 · 1001 阅读 · 0 评论 -
POJ - 3281 Dining (ISAP EK Dinic)
题目大意:有N头牛,F种食物,D种饮料,每种食物和饮料都只有一 现在给出每头牛所喜爱的食物和饮料,问最多有多少头牛能同时得到自己喜欢的食物和饮料解题思路:将牛拆成两点,权值为1,一条和喜欢的食物相连,权值为1,另一条和喜欢的饮料相连,权值为1 然后将所有食物和超级源点相连,权值为1 将所有的饮料喝超级汇点相连,权值为1ISAP#include <cstdio>#include <cstrin原创 2015-08-02 23:51:22 · 676 阅读 · 0 评论 -
POJ 3680 Intervals(区间k覆盖问题)
题目大意:给出N个区间,每个区间都有相应的收益。限制是每个数最多被覆盖k次 问如何选择区间,才能使得受益最大解题思路:区间k覆盖问题,首先点和边很多,所以离散化 接着是源点连接第一个点,容量为k,费用为0(保证每个数最多被覆盖k次) 最后一个点连接汇点,容量为k,费用为0 剩下的是点之间的关系了 我们按从小到达排序,然后每个点之间连一条边,容量至少大于等于k(因为源点到第一个点已经限制了是原创 2015-09-04 22:40:11 · 2006 阅读 · 0 评论 -
HDU 3376 Matrix Again(费用流)
题目大意:给出一张网格,网格上面有相应的正数,现在要求你从左上角出发,走到右下角,再从右下角出发,走回左上角,沿路经过的格子不能重复(除了左上角和右下角的格子),且从左上角走到右下角时只能往右或者往下走,从右下角走到左上角只能往上或者往左。现在问所走的格子的最大总和是多少解题思路:遵守规则的话,从左上角到右下角,和从右下角到左上角,其实走的路径是对称的,能从上往下走,就表示能从下往上走,所以我们以左原创 2015-09-06 00:05:38 · 422 阅读 · 0 评论 -
ZOJ - 3229 Shoot the Bullet(有源有汇上下界最大流)
题目大意:有一个屌丝要给M个女神拍照,每个女神至少要拍G张照片 给出屌丝每天的拍照任务,每天要给C个女神拍照,因为内存有限,所以每天至多拍D张照片 女神i要求该天至少要拍L张,至多拍R张 问屌丝能否满足所有的女神的要求,因为是屌丝,当然希望拍的照片越多越好了,所以,要求求出这个屌丝能拍的最多张照片是多少张解题思路:有源有汇上下界最大流,将每个女神抽象成一个点,每天抽象成一个点,每个任务抽象成一原创 2015-09-07 10:48:14 · 516 阅读 · 0 评论 -
HDU - 3338 Kakuro Extension(最大流 行列模型)
题目大意:看一下图基本就知道了解题思路:难点是构图。。 设置一个超级源点和所有的行的和相连,容量为该行的和 - 该行和由几个数相加得到 设置一个超级汇点,和所有列的和相连,容量为该列的和 - 该列和由几个数相加得到 接着就是空白部分和 “行和“和 “列和“的关系了 空白连向该行的行和,权值为8 空白连向该列的列和,权值也为8 为什么为8,而不是9,因为流量也可能为0,但是0是不能填的,所原创 2015-08-04 14:13:41 · 811 阅读 · 0 评论 -
HDU - 2732 Leapin' Lizards(ISAP Dinic EK)
题目大意:给出两张地图,第一章地图代表的是每根柱子的高度,第二张地图代表的是每只蜥蜴所在的位置 每根柱子只能站一只蜥蜴,蜥蜴离开该柱子时,柱子的高度会下降一个单元,当柱子的高度为0时,该柱子将不可用 现在给出每只蜥蜴能跳跃的距离,问最少有多少只蜥蜴逃不出来解题思路:将柱子拆成2个点,权值为柱子的高度 将每只蜥蜴所在的位置和超级源点连接,权值为1 将能通到外界的柱子连接到超级汇点,权值为INF原创 2015-08-02 23:09:57 · 879 阅读 · 1 评论 -
HYSBZ - 1001 狼抓兔子(对偶图+最短路)
题目大意:给出一张图,这张图的每条边都有相应的容量,现在问,从(1,1)到(N,M)的最小割是多少解题思路:转成对偶图去解决#include <cstdio>#include <cstring>#include <algorithm>#include <queue>using namespace std;const int MAXNODE = 1000010;const int MAXE原创 2015-09-07 22:53:03 · 552 阅读 · 0 评论 -
SGU - 194 Reactor Cooling(无源无汇有上下界最大流)
题目大意:给出M条管道,每条管道都有相应的下界和上界 现在问每条管道之间形成一个环,管道之间流量的最大值是多少解题思路:两点之间的有向边的容量就是边的上界-下界 然后添加一个超级源点,连线那些流入的值大于流出的值的点,容量为流入值-流出值 再添加一个超级汇点,连线那些流入值小于流出值的点,容量为流出值-流入值 接着跑最大流,如果满流,表示可行 要求每条边的流量,只要找出每条边的流量,再加上原创 2015-09-06 23:46:40 · 574 阅读 · 0 评论 -
HDU - 3157 Crazy Circuits(有下界的最小流)
题目大意:一个电路板,上面有N个接线柱,还有+,-两极 现在给出M条线路,每条线路都有相应的下限,即需要流至少多少的电流才能使该线路运行 问需要通多少的电流,才能使得所有的线路都能运行解题思路:有下界的最小流,这个百度一下可以搜到,具体就不解释了 这边解释一下为什么先跑一下最大流,再添加边,再跑一下最大流 在没有添加边的情况下,先跑最大流,即保证能平衡的先尽量平衡,这样就可以减少后面的流量了原创 2015-09-06 22:46:05 · 479 阅读 · 0 评论 -
HDU - 1733 Escape(网络流层次模型)
题目大意:给出一张地图,每个位置每个时刻只能有一个人,现在问这些人都跑到门那边的最短时间解题思路:网络流的层次模型,因为每个点每个时刻只能有一个人,所以拆成边,容量为1 再把每个结点每秒当成一个结点,接着枚举时间 连边的话有几种状态,一种是走到相邻格子的,如果能走的话,就把该点的出点连向下一个格子的下一秒的时态的入点 有可能该点的人不走,所以该点的出点要连接到该点的下一时刻的入点#includ原创 2015-09-06 15:50:48 · 545 阅读 · 0 评论 -
HDU - 3061 Battle(最大权闭合)
题目大意:由于小白同学近期习武十分刻苦,很快被晋升为天策军的统帅。而他上任的第一天,就面对了一场极其困难的战斗: 据侦查兵回报,前方共有N座城池,考虑到地势原因,最终得到一个结论:攻占某些城池之前必须攻占另外一些城池。 事实上,可以把地图看做是一张拓扑图,而攻占某个城池,就意味着必须先攻占它的所有前驱结点。 小白还做了一份调查,得到了攻占每个城池会对他的兵力产生多少消耗(当然也可能会得到原创 2015-09-06 16:24:44 · 438 阅读 · 0 评论 -
HDU - 3251 Being a Hero(最小割)
题目大意:有一个国王要奖励英雄一些城镇,英雄可以从国王奖励的城镇中挑选k个,每个城镇都有相应的value 但国王又不想走到这个英雄选择的城镇,所以英雄选择了城镇的时候就要考虑要炸掉哪些路,使得国王走不到他的城镇,每条道路都有相应的value 问英雄的最大获利,和需要炸掉的路是哪些解题思路:假设国王所在的地点是u,英雄所选择的城镇是v,现在的任务就是破坏掉s–>u…->v->t(s是源点,t是汇点原创 2015-09-06 13:54:05 · 396 阅读 · 0 评论 -
SGU - 176 Flow construction(上下界有源有汇最小流)
题目大意:给出N个点,M条有向边 如果有向边的标号是1的话,就表示该边的上界下界都为容量 如果有向边的标号为0的哈,表示该边的下界为0,上界为容量 现在问,从1到N的最小流是多少,并输出每条边的流量解题思路:上下界有源有汇最小流,基本模版#include <cstdio>#include <cstring>#include <algorithm>#include <vector>#in原创 2015-09-07 12:29:02 · 965 阅读 · 0 评论 -
HDU - 3035 War(对偶图+最小割+最短路)
题目大意:给出一个方格,要求从(0,0)位置运送尽量多的货物到(N,M),给出每条边的容量,问最多可以运送多少过去解题思路:这题要转换成对偶图去做,然后求最短路,如果用最大流的话,光看边和点的数量就足以爆炸了 给出对偶图的讲解浅析最大最小定理在信息学竞赛中的应用#include <cstdio>#include <cstring>#include <algorithm>#include <q原创 2015-09-07 15:29:15 · 585 阅读 · 0 评论 -
POJ 3204 Ikki's Story I - Road Reconstruction(最小割+残余网络)
题目大意:给出一张有向图,现在要求你增大一条边的容量,使得最大流增大解题思路:增大的边肯定是割边了,所以,先找到割边 接着枚举割边,增容,在残余网络上跑最大流,如果有流的话,就表示增加了改边可以使最大流增大#include <cstdio>#include <cstring>#include <algorithm>#include <vector>#include <queue>usin原创 2015-09-05 16:51:38 · 534 阅读 · 0 评论 -
POJ 1637 Sightseeing tour(混合图的欧拉回路)
题目大意:给出一张混合图,问能否构成欧拉回路 解题思路:混合图的欧拉回路,这是一类问题,用网络流解决 首先先定向所有的无向边,看是否每个点都满足(入度-出度)的绝对值%2==0,如果有不为0的,表示该点的度数为奇数度,就不能构成欧拉回路了 我们取每个点的(入度-出度)的绝对值/2的值为该点和源点或者汇点连边的容量,接着是讨论一下,该点和源点连接还是和汇点连接 因为有向边是不需要定向的,所以构原创 2015-09-05 13:36:10 · 369 阅读 · 0 评论 -
POJ - 3436 ACM Computer Factory (ISAP EK Dinic)
题目大意:有N台机器,每台机器能处理相应型态的电脑,处理完后,电脑将变成另一种形态。 每台机器有相应的工作限度,每次至多处理K台 现在问,在一次流水线生产中,最多可以产生多少台完整的电脑(流水线指的是在每一台机器的工作限度下)解题思路:题目比较难理解,理解题目的话,就比较好做了 首先,将每台机器的点拆成两个点,权值为工作限度 如果机器能处理的电脑的状态全是0的话,就将其和超级源点连接,表示该原创 2015-08-02 23:20:10 · 792 阅读 · 0 评论 -
HDU 3879 Base Station(最大权闭合)
题目大意:给出N个站的修建花费和M条收益边,问如何建站才能使收益达到最大化解题思路:最大权闭合,点和边分成两个点集,边和源点相连,权值为收益 点和汇点相连,权值为建造该点的花费 点和边如果有关系的话,就连边,权值为INF 具体证明的话,详见胡伯涛的最小割在信息竞赛中的应用ISAP解法:#include <cstdio>#include <cstring>#include <algorith原创 2015-09-04 15:36:17 · 368 阅读 · 0 评论 -
UVALive - 2197 Paint the Roads(费用流)
题目大意:有n个点,m条边,你的任务是选择其中的一些边,使得每条被选择的边组成一些没有公共边的回路,且每个城市恰好在其中的k个回路上,被选择的边的总权值要求最小解题思路:k个回路,每个城市都有,表示每个城市的入度和出度都是k,所以以此建边 源点连向每个城市,容量为k,费用0 每个城市连向汇点,容量为k,费用0 边连接两个城市,容量为1,费用为权值跑最小费用最大流#include <cstdio原创 2015-08-31 08:40:58 · 761 阅读 · 1 评论 -
UVALive - 3972 March of the Penguins(最大流+枚举)
题目大意:有n个冰块,每块冰块能承受mi只企鹅从上面跳走 初始时每个冰块上有ai只企鹅,每只企鹅跳跃的最远距离为d,要求所有的企鹅在同一片冰块上集合,问哪些冰块满足要求解题思路:这题和HDU - 2732 Leapin’ Lizards 类似,具体的就不讲了,枚举+最大流就可以了#include <cstdio>#include <cstring>#include <algorithm>#原创 2015-08-31 00:32:09 · 1217 阅读 · 1 评论 -
UVALive - 2531 The K-League(最大流+枚举)
题目大意:有n支队伍进行比赛,每支队伍需要打的比赛次数相同,每场比赛恰好有一支队伍胜,一支队伍败,给出每支队伍目前胜的场数和败的场数,以及每两支队伍还剩下的比赛场数,确定所有可能得冠军的队伍解题思路:枚举每支队伍,然后让该队伍在接下来的所有比赛中都获胜。 建图的话,就比较简单了,源点连向每场比赛,容量为比赛次数 每场比赛连向比赛队伍,容量为比赛次数 接着每支队伍连向汇点,容量为枚举队伍的总胜场原创 2015-08-31 00:25:10 · 1379 阅读 · 1 评论 -
UVALive - 2957 Bring Them There(最大流 图论建模)
题目大意:有n个星球,你的任务是用最短的时间把k个超级计算机从S星球运送到T星球。每个超级计算机需要一艘飞船来运输,行星之间有m条双向隧道,每条隧道需要一天时间来通过,且不能有两艘飞船同时使用同一条隧道,隧道不会连接两个相同的行星,且每一对行星之间最多只有一条隧道解题思路:按照大白书上的思路是拆点 比如运送的时间为T,那么就把每个点u拆成T + 1个,分别为u0, u1 … uT,分别对应的是第i原创 2015-08-31 00:12:00 · 1174 阅读 · 1 评论 -
UVA - 11082 Matrix Decompressing(最大流+行列模型)
题目大意:给出一个R行C列的矩阵,现在给出他的前1-R行和 && 前1-C列和,问这个矩阵原来是怎样的,要求每个元素大小在1-20之间解题思路:将每一行连接到超级源点,容量为该行的和-列数 将每一列连接到超级汇点,容量为该列的和-行数 接着将每行连接到该行的每一个元素,容量为19 将每个元素连接到元素所在列,容量为19 为什么容量为19,因为跑最大流的时候有可能边的流量为0,而他要求的是每个原创 2015-08-25 00:30:50 · 812 阅读 · 0 评论 -
UVA - 1161 Objective: Berlin(最大流+时序模型)
题目大意:有n个城市m条航线,给出每条航线的出发地,目的地,座位数,起飞时间和到达时间(所给形式为HHMM,记得转化),再给出城市A和B,和到达城市B的最晚时间,现在问一天内最多有多少人能从A飞到B,可以在其他城市中转解题思路:将飞机票拆点,拆成i–>i + m,容量为座位数。 接着判断一下,航线之间的连线 如果航线的起点是A的话,那么就和超级源点相连,容量为INF 如果航线的终点是B且到达时原创 2015-08-25 00:23:09 · 711 阅读 · 0 评论 -
UVA - 10779 Collectors Problem(最大流)
题目大意:有N个人在收集贴纸。现在给出每个人所拥有的贴纸 然后1这个想要得到更多种类的贴纸,所以他要拿他的贴纸去跟别人换,换的条件是1张交换1张,且你所交换的那张贴纸的种类对方没有,你想要得到的贴纸的种类对方至少有2张,问最后这个人能得到多少种贴纸解题思路:一个超级源点,连接贴纸的种类,容量为1这个人所拥有的该种类的贴纸数量 将所有贴纸的种类连接到超级汇点,容量为1 在弄出N-1个点,代表另外原创 2015-08-25 00:04:31 · 976 阅读 · 0 评论 -
UVA - 11248 Frequency Hopping(网络流+割)
题目大意:有N个点,M条有向边,每条边都有相应的容量。现在要求你从点1运送东西到点N,运送的量为C 如果可以运送,输出possible 如果不能运送,看能不能只增大一条弧,使得运送成功,如果可以的话,输出所有可增大的弧 如果都不行,另外输出解题思路:先跑一次最大流,最大流如果大于等于C,就不用括弧了 如果不行的话,就进行括弧。 扩大哪些弧的容量呢。答案是割边的容量,因为最小割==最大流原创 2015-08-24 23:54:59 · 1030 阅读 · 0 评论