
网络流
yuege38
在校学生,努力学习
展开
-
POJ3680_Intervals_离散化&&最小费用流
题意给定 N 个带权的开区间。i 号区间覆盖(ai, bi),权重为 wi。现在要从中选取一些区间,要求人一点都不被超过 K 个区间覆盖,目标是最大化总的权重。原创 2017-06-27 18:52:57 · 274 阅读 · 0 评论 -
HDU1532_Drainage Ditches_最大流模板题
Drainage DitchesTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 17634 Accepted Submission(s): 8295Problem DescriptionEvery ti原创 2017-06-02 21:22:13 · 257 阅读 · 0 评论 -
POJ2987_Firing_最大权闭合图
大致题意公司要裁员,裁掉每个人都有一个收益,这个收益可正可负。如果要裁掉一个人,他的下属也要全部裁掉,同理,下属的下属也要被裁掉。求最优方案,使最终收益最大化。输出裁掉的人数和最大化的收益。思路根据题意可以抽象为:图上的每一个点都有一个权值,并且这个权值可能是负的,求最大权值闭合图。求解最大权闭合图需要用最小割,具体做法如下:先构造网络流N,添加源点s,从s到正权值点做原创 2017-06-06 11:27:53 · 381 阅读 · 0 评论 -
POJ2914_Minimum Cut_无向图最小割::stoer_wagner算法
题意给出一个有边权的无向图,求最小割。思路如果按照网络流的做法,通过求最大流来求最小割。就需要确定一个源点然后枚举汇点,这样的复杂度极高,据说有O(n5)。所以这个题并不是这么做,而是用stoer_wagner算法。这一算法在求最小割的问题中具有普适性。stoer_wagner算法算法思路整体思路和求最小生成树的prim算法有些相似,不过这里求的“有点像”“最大生成树”。构造一个集合A,一开始将任意原创 2017-06-07 00:18:26 · 429 阅读 · 0 评论 -
POJ3155_Hard Life_二分求解分数规划||最大权闭合图
题意给定一个图,求一个子图。使子图中边和定点的比值最大。输出子图中顶点的个数,和各顶点的序号。思路二分求解整数规划子图中边数与点数的比值最大化,这是一个分数规划的问题。等式变换后通过二分枚举答案来解决。剩下的问题就是检验答案的合法性。最大权闭合图检验合法性每选入一条边,就一定要把它的两个顶点选进来。这样的必要条件,符合最大权闭合图的约束特点。因此可以考虑用最大权闭合图的思想来做。 思想过程可以联系原创 2017-06-10 21:40:24 · 287 阅读 · 0 评论 -
POJ2112_Optimal Milking_最大流解决匹配问题
最大流、二分图多重匹配、二分枚举、floyd原创 2017-06-13 18:06:18 · 364 阅读 · 0 评论 -
最小费用流模板
O(FVE)应用bellman_ford算法求最短路#include<cstring>#include<vector>using namespace std;struct edge{ int to, cap, cost, rev; edge(int a, int b, int c, int d) :to(a), cap(b), cost(c), rev(d){}};co原创 2017-06-20 01:03:54 · 235 阅读 · 0 评论 -
POJ3422_Kaka's Matrix Travels_最小费用流::拆点、重边
题意一个 n * n 的矩阵中的每一个格都有一个数字。从左上角往右下角走,只能选择往下走或往又走,沿途把经过格子里的数字加起来,之后把格子里的数字置为0,如此重复 k 次。求最终的和。思路题目要求的是最大和,取其相反数,就转化成了一个流大小为 k 的最小费用流的问题。 首先,数字在格子上,就是权值在点上,因此需要将一个格子拆成两个点,“入点”向“出点”连一条费用为 -x, 容量为 1 的边(x 为原创 2017-06-20 19:13:27 · 280 阅读 · 0 评论 -
POJ3281_Dining_最大流::分配问题
题意有 n 头牛, f 份食物, d 份饮料。每头牛喜欢特定的特定几种食物和特定的集中饮料。问怎么分配才能让尽可能多的牛既吃到喜欢的食物又喝到喜欢的饮料,这这个最多的牛的数量。思路显然是一个最大流的问题。 在牛、食物、饮料之外增加一个源点一个汇点。 从源点向每一份食物连边,从食物向爱吃它的牛连边,从牛向它爱喝的饮料连边,从每一份饮料向汇点连边。在这个图上跑最大流。所有边的容量都是 1 。 那么原创 2017-06-22 17:37:49 · 439 阅读 · 0 评论 -
POJ3469_Dual Core CPU_最小割::分两部分
题意现有 N 个模块,A 、 B 两个处理器。模块 i 在 A 上运行的花费为 Ai,在 B 上运行的花费为 B 。所有的模块中有 M 对模块组合 (ai, bi),如果 ai 和 bi 不在同一个模块上运行,会产生额外花费 wi 。求所有模块运行所需的最小花费。思路用最小费用将对象划分成两个子集合的问题,常常可以转化成最小割。题目链接http://poj.org/problem?id=3469AC原创 2017-06-22 19:59:47 · 196 阅读 · 0 评论 -
POJ2175_Evacuation Plan_消负圈的“更小”费用流
消圈法与”更小“费用流原创 2017-06-24 00:12:34 · 452 阅读 · 0 评论 -
POJ3686_The Windy's_最小费用流::最小权匹配
题意N 个玩具交给 M 个工厂。j 号工厂加工 i 号玩具需要花费 Zij 时间。每个玩具都要在一个工厂里完成。玩具的顺序是任意的。每个工厂在完全加工好一个玩具之前,都不能处理别的订单。请问加工完所有玩具的平均时间的最小值。思路加工一件玩具花费的时间包括 等待加工的时间 + 加工它的时间。这一点题目里居然没有说明,总感觉会很困扰。 一眼看上去就是一个最小费用流的问题,而且很像拆点的题型。但是常规的原创 2017-06-26 00:23:15 · 396 阅读 · 0 评论 -
Dinic 算法模板
vector<edge> G[maxv];int level[maxv];int iter[maxv];void add(int from, int to, int cap){ G[from].push_back(edge(to, cap, G[to].size())); G[to].push_back(edge(from, 0, G[from].size() - 1));}原创 2017-07-17 11:10:53 · 254 阅读 · 0 评论