![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
网络流
文章平均质量分 73
s_h_r
这个作者很懒,什么都没留下…
展开
-
POJ 3204 Ikki's Story I - Road Reconstruction 残余网络
题意:给你一个有向图 问你跑完最大流之后可以通过改变多少条边使得最大流流量增加思路:能够改变流量的边一定是最小割上的边 因此要找到最小割 我们的做法是找到满流的边 但是如果一条增广路上不止一条边满流 那么改变这条边的容量是没有意义的 因为另一条满流边还是会限制流量的增加 正确做法是 不仅要从源点找满流边 还要从汇点逆向找 正向访问过的点标记为1 逆向访问过的点标记为2 如果一条边的起点是1 终原创 2015-06-21 20:45:39 · 368 阅读 · 0 评论 -
POJ 2125 Destroying The Graph 二分图最小点权覆盖 最小割
题意:给你一个n个点 m条边的有向图 给出两种操作 删除所有以i为入点的边 有一个花费 删除所有以i为出点的边 也有一个花费 问你要想删除所有边 最小花费是多少思路:选择一个点 可以覆盖所有他的入边 也可以覆盖所有他的出边 这不就是二分图最小点权覆盖么 建图方法是 对于每个点拆成两个点 一个入点一个出点 将所有源点和所有出点连边 容量为删除出边的花费 将所有入点和汇点连边 容量为入边的花费 将原创 2015-06-10 20:42:19 · 465 阅读 · 0 评论 -
POJ 1698 Alice's Chance 最大流
题意:有N部电影 每天最多拍一部 对于每一部电影每周都有固定的几天拍摄 给出每一部电影每周周几拍 一共拍多少天 以及必须在多少周之内拍完 问你能否把所有电影拍完思路:把每一天看成一个节点 对于每一部电影 从源点向其连边 容量为可以拍的天数 从该电影向可以拍摄的那一天连边 容量为1 然后把每一天向汇点连边 容量为1 判断最大流是否等于拍完所有电影所花费的天数即可#include #incl原创 2015-06-11 14:27:16 · 510 阅读 · 0 评论 -
UVA 1349 Optimal Bus Route Design 最小费用流+拆点
题意:给一个n个点的有向带权图 找若干个有向圈使得每个点敲好属于一个圈且权和尽量小思路:要想使每个点恰好属于一个圈 那么这个点只有唯一的后继 然后就可以用匹配的思想来做了 这道题可以用KM算法 但我用的是费用流 具体建图是将每个点拆点 代表入点和出点 对于每条有向边 从出点到入点连边 容量1 费用为边的权值 然后从源点到每个点的入点连边 容量为1 费用为0 从每个点的出点到汇点连边 容量为1原创 2015-06-14 12:53:55 · 567 阅读 · 0 评论 -
POJ 2391 Ombrophobic Bovines 二分最大流+拆点
题意:给你n个地区 每个地区有两个值 分别是下雨前能容纳的人数和下雨后能容纳的人数 再给你m条边 代表两个地区有一条无向路 问你下雨后该怎么走才能使每个地区不超负荷且总用时最少思路:对于每一个点有两个状态 于是我们可以将每一个点拆点 表示这两个状态 将源点与每一个点连边 容量为下雨前能容纳的人数 将拆完后的点与汇点连边 容量为下雨后能容纳的人数 然后二分总时间 之前先用floyed预处理出任意原创 2015-06-13 11:46:53 · 403 阅读 · 0 评论 -
HDU 4940 无源汇带上下界可行流
真的好久没刷题了 浪费了一个月的时间应付期末考试 现在几乎废了 各种坑队友 十分不在状态 希望这个暑假尽快找回!题意:给你一个连通图 每条有向边有两个值 一个是断开这条有向边的费用 一个是断开后新建一条无向边的费用 问你是否存在一个集合S 使得这个集合与其补集T 破坏所有S集合到T集合的边代价和是X 然后修复T到S的边为无向边代价和是Y 满足Y思路:可行流 需要自己体会(其实是我真的不知道原创 2015-07-30 22:07:33 · 584 阅读 · 0 评论 -
HDU 5294 Tricks Device 最短路+最小割
题意:给你一个无向图 问你 至少和至多 删除多少条边 可以使从起点到终点的最短路变长(并不一定不可到达)思路:比赛的时候想的方法是费用流+二分 无限超时 水的不行- - 正解是先用最短路预处理出所有的最短路径 建图后求最小割即为至少删除的边数 因为删除了最小割上的边 最短路上的起点和终点就不连通了 放在原图上最短路必然增大 而原图所有边数减去最短路径上边数最少的那条路径的值就是至多删除的边数原创 2015-08-01 20:29:54 · 510 阅读 · 0 评论 -
HDU 4494 Teamwork 最小费用最大流
题意:输入n m 代表有n个地方需要修理 m种工人 以下n行第一行两个值x y 代表仓库 后面n-1行每行前四个数代表每个地方的坐标和修理的开始时间和持续时间 后面跟上m个数 代表这个地方需要哪种工人的数量 问你最少从仓库派多少工人 工人从一个点到另一个点的时间为两点之间的欧几里得距离思路:这题输入比较复杂绕 要求的是最少派的工人数量 其实也就是每种工人的最少数量和 因此我们可以把问题简化 分原创 2015-08-18 22:03:39 · 447 阅读 · 0 评论 -
SGU 438 The Glorious Karlutka River =) 动态网络流
题意:给你一条宽为w的河 河中央有一些石头 有一些人在河的一面 它们想到河的另一面 每个人的弹跳距离为d 每个石头每一时刻有一个最大载人数量 问你所有人是否能跳到河对面 如果能 输出最小时间思路:这道题并不是我们常做的静态网络流 因为每一秒中网络中的流量可能不相同 所以我们要用动态的思想常见的动态网络流的题型为固定时间求最大通过流量 和 固定流量求最小通过时间 显然这道题属于第二种建图原创 2015-09-03 20:53:07 · 844 阅读 · 0 评论 -
HDU 4780 Candy Factory 费用流
题意:有m个机器生产n个糖果,每个机器同一时间只能生产一种糖果,而且每种糖果必须在规定的时间范围内生产,机器从生产一种糖果转换为生产另一种糖果有一个时间转换,每种糖果生产时可能有额外开销。具体的还是自己读一遍题吧。。思路:借鉴大牛的思路。根据题意,每一种糖要不就是某种机器第一个生产出来的,要不就是在其他糖生产之后生产出来的,而这两种花费有所不同,因此一种糖可以看做是被机器生产出来的或者被另一种糖生产原创 2015-10-22 15:05:35 · 371 阅读 · 0 评论 -
2015沈阳赛区网络赛 HDU 5457 Hold Your Hand 字典树+最小割
题意:给你n个十进制数和m个二进制字符串的前缀或后缀,每一个都有一个花费,一个数可以被它的二进制前缀或后缀消除,问你最小的花费使得所有数消除,无解输出-1。思路:将这n个数的二进制正着反着建到两个字典树上,每个节点值为INF,然后对于每一个二进制字符串,更新其最底下的节点的值,把两棵树连起来在字典树上跑最小割。这个题代码很low,为了防止000和0000重复同一个值,我用的map,而正反0000也是原创 2015-09-22 22:14:32 · 839 阅读 · 0 评论 -
LA 6395 SurelyYouCongest 最大流
题意:一个城市有n个路口m条路,每一条路一次性只能让一个人通过,否则就会形成阻塞。但是在路口的人数是不限的,现在给出一些人的位置,他们同时出发赶往路口1,同时他们只走最短的路,问你在不形成阻塞的前提下最多有多少人能到达路口1。思路: 1:求出1到其他路口的最短路,然后只保留最短路。 2:只有当人在到路口1的距离相同的路口才有可能形成阻塞。 3:对人到路口距离排序,对于相同距离的人跑最大流,一层原创 2015-10-14 16:50:58 · 466 阅读 · 0 评论 -
POJ 1149 PIGS 最大流建图
思路见 PKU 1149,PIGS,构造网络流模型时,要注意合并节点和边又是大神带我飞。。。#include #include #include #include using namespace std;#define REP( i, a, b ) for( int i = a; i < b; i++ )#define FOR( i, a, b ) for( int原创 2015-06-09 17:59:25 · 354 阅读 · 0 评论 -
ZOJ 3760 Treasure Hunting 二分图带权最大独立集 最小割
题意:给你一个偶数P和二维坐标上的一些点(x, y) 权值为 x&y 让你选出其中一些点 使得权值和最大 且选中的点集中不存在这样的两点:(a, b)使得gcd(a.x^a.y^b.x^b.y, p) 思路:由于题意中已经明确说明P为偶数 而两个偶数的最大公约数永远大于1 又发现对于任意两个数A B 只要它俩奇偶性相同 则 A^B必为偶数!所以我们只需要把图中所有点的权值按照奇偶性划分 它的原原创 2015-06-09 21:09:57 · 432 阅读 · 0 评论 -
POJ 3422 Kaka's Matrix Travels 最大费用最大流
题意:给你一个n×n的方格 每个格子有一个数 一个人从左上走到右下 每经过一个格子 就会将得到这个格子的点数 然后这个格子值变为零 问你这个人走k次 得到的最大值是多少思路:刚做这个题的时候 想到既然一个格子的值只能取一次 那么是不是限定一个格子只能取一次呢 于是拆点后连一条容量为1的边 但发现这样就相当于限制了每个点的经过次数 而题目中并没有限制每个点经过的次数 想了半天也解决不了这个问题原创 2015-06-21 15:55:35 · 546 阅读 · 0 评论 -
POJ 3469 Dual Core CPU 最小割
题意:给你一个双核处理器 再给你n个进程在这两个处理器上的处理时间 但是这些进程需要相互交换信息 给你m行信息u v c 分别代表如果u v进程不在同一个处理器交换信息 则要花费额外的时间c 问你运行完这n个进程的最小时间花费思路:对于一个事物有两个状态的 一般要用到二分图或者最小割来解决 这题就是最小割 建图方法是 对于进程i在两个处理器的花费时间a b 分别建图S到i 容量为b 代表如果想原创 2015-06-21 11:13:11 · 351 阅读 · 0 评论 -
UVA 12264 Risk 二分最大流
很明显是一道网络流的题题目提到最小值最大化 就可以想到二分答案 然后判断是否满流即可#include #include #include #include #include using namespace std;#define bug puts("....bug....")const int maxn = 200 + 10;const int N = 100 +原创 2015-05-28 18:50:04 · 1089 阅读 · 0 评论 -
UVA 10779 Collectors Problem 最大流
题意:Bob手里有一些贴纸 他想和他的朋友们交换贴纸 使得自己的贴纸种类最多 Bob的朋友们相互之间不能交换 只能和Bob换 且只拿自己有重复的贴纸交换自己没有的贴纸思路:把Bob当作源点 把他的朋友们以及贴纸的种类看成不同的点 将Bob与所拥有的贴纸种类连边 容量为该种贴纸Bob拥有的数量 对于他的一个朋友i 如果他的一种贴纸数量超过1 就将i与该种贴纸种类连边 容量为他有的该种贴纸数量减一原创 2015-06-03 21:16:25 · 385 阅读 · 0 评论 -
UVA 11248 Frequency Hopping 最小割
题意:给你一个n个点 m条边的有向图 问你是否存在一个从1到n且不小于c的流 如果不存在能否通过改变一条边的容量达到要求思路:这个题就好像最短路树一样 只要改变的路不是最短路树上的 最短距离就不会改变 这个题是只有改变最小割边的容量 最大流才会改变 所以只要求出最小割即可本题有两个重要的优化 详见代码PS 为什么我的代码比大神们的多辣么多 QAQ#include #include原创 2015-06-03 15:47:48 · 449 阅读 · 0 评论 -
UVA 1324 Bring Them There 拆点+打印解
参考的大神的题解 http://blog.csdn.net/auto_ac/article/details/11579687 上面说的很详细#include #include #include using namespace std;#define REP( i, a, b ) for( int i = a; i < b; i++ )#define FOR( i, a, b )原创 2015-06-04 18:56:18 · 602 阅读 · 0 评论 -
HDU 4292 Food 最大流 + 拆点
很简单的一道网络流题目 由于每个人只能选择一种食物和一种饮料 所以为了限制每个人只选一种 将人拆点 然后就求最大流即可 模板敲错一个小地方 导致无限超时.... 比着模板对了半天才发现哪错了.... 还是对网络流理解的不够深啊....#include #include #include #include #include using namespace std;#define R原创 2015-05-29 22:23:30 · 538 阅读 · 0 评论 -
POJ 3084 Panic Room 最小割
根据题意 要求锁一些门 使得入侵者无法到达指定的房间 这个是不是很像网络流当中的最小割 即把图中所有点分成 S T 两个集合 使得满流后不再连通 而最小割是网络流当中容量最小的割 这恰好又满足题目所求锁最少门的限定#include #include #include #include #include using namespace std;const int maxn =原创 2015-05-28 21:16:33 · 521 阅读 · 0 评论 -
HDU 1569 二分图带权最大独立集 最小割
题意:给你一个n×m的棋盘 每个格子都有一个非负整数 从中选取一些数 使得相邻两数没有公共边 问取到的数的最大和是多少思路:取出来的数不相邻并 也就是说如果选取一个数 它上下左右都不能选 而且和要最大 这是不是像某种图论模型 没错 是他是他就是他 二分图最大独立集~ 但是这个题目多了权值 就不能用Hungary算法来实现了 要用到网络流的知识了 具体做法是 对于奇数格子的点 将源点与该格子连边原创 2015-06-05 10:17:14 · 533 阅读 · 0 评论 -
POJ 2987 Firing 最大权闭合子图
参考资料: 《最小割模型在信息学竞赛中的应用》最大权闭合子图:若一有向图G的一个子V图满足 V中所有点的出边仍指向V中的点,则该子图V就是G的一个闭合子图,其中V的顶点权和最大的称为G的最大权闭合子图上图中闭合图有:{5}、{2,5}、 {2,4,5}、{3,4,5}、 {1,2,3,4,5}、{1,2,4,5}最大权闭合子图为 {3,4,5}建图方原创 2015-05-30 11:35:56 · 495 阅读 · 0 评论 -
UVA 1306 LA 2531 The K-League
题意:有n只队伍打比赛 给出每只队目前获胜和失败的场数 再给出两两队伍接下来的比赛场次 问你哪些队伍可能的冠军思路:主要考察建图方法 我们要依次判断每只队伍是否可能获胜 对于队伍i 首先预处理出i获胜的总场数sum 对每两只队伍进行编号(比如(u, v)编号为x) 从源点连一条到该编号的边 容量为这两只队伍接下来要比的场次 然后从该编号向这两只队伍连边 容量INF 最后 对于每只队伍 分别向汇原创 2015-06-09 15:49:17 · 535 阅读 · 0 评论 -
HDU 4406 GPA 最大费用流
题目大意:给你一些学科和现在已经获得的分数,然后每天可以让一些学科涨一定的分数,但是每天涨的总和一定,并给你一个二次算分公式,问你规定天数后最大学分是多少。思路:首先要保证及格,如果某一课的基础分a小于60,从源点连a到该科,费用为-INF,这样就保证了先增广缺少的分数。然后对于60分以上的情况,费用与流量平方成正比,我们可以用拆边法,LRJ白书P366上有。#include <cstdio>#i原创 2015-10-30 18:18:46 · 359 阅读 · 0 评论