![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
网络流
HumveeA6
这个作者很懒,什么都没留下…
展开
-
(模板)网络流最大流,dinic算法
没啥好说的,小心模板别搞错了就是了struct edge{ int to,cap,rev;};vector<edge>G[210];int level[205],iter[205];void addedge(int from,int to,int cap){ G[from].push_back(edge{to,cap,(int)G[to].size()})...原创 2018-03-08 20:56:09 · 216 阅读 · 0 评论 -
LOJ 116 有源汇有上下界最大流(模板)
建图方法 将有上下界的网络流图转化成普通的网络流图首先建立附加源点ss和附加汇点tt 对于原图中的边x->y,若限制为[b,c],那么连边x->y,流量为c-b 对于原图中的某一个点i,记d(i)为流入这个点的所有边的下界和减去流出这个点的所有边的下界和 若d(i)>0,那么连边ss->i,流量为d(i) 若d(i)<0,那么连边i->tt,流量...原创 2018-05-30 21:53:28 · 316 阅读 · 0 评论 -
LOJ 117 有源汇有上下界最小流(模板)
建图方法 将有上下界的网络流图转化成普通的网络流图 首先建立附加源点ss和附加汇点tt 对于原图中的边x-&amp;amp;gt;y,若限制为[b,c],那么连边x-&amp;amp;gt;y,流量为c-b 对于原图中的某一个点i,记d(i)为流入这个点的所有边的下界和减去流出这个点的所有边的下界和 若d(i)&amp;amp;gt;0,那么连边ss-&amp;amp;gt;i,流量为d(i) 若d(i)&amp;原创 2018-05-30 21:48:21 · 360 阅读 · 1 评论 -
2018 Spring Training 图论 合集
https://cn.vjudge.net/contest/229893#overview 题目链接 A.Uva 302 判断能不能走就是一个一笔画问题,(欧拉回路),因为题目要求是要回到原点,因此所有点的度都必须是偶数才能满足要求。操蛋的是输出路径的时候是要输出路径 编号并且要求输出路径编号字典序最小的路径。本蒟蒻没想到什么好办法,于是每个点拿了一个map存路径,第一个键值是路径的编号,...原创 2018-05-27 19:05:42 · 213 阅读 · 0 评论 -
SGU 194/LOJ 115(无源汇可行流模板)
题意:给n个点,及m根pipe,每根pipe用来流躺液体的,单向的,每时每刻每根pipe流进来的物质要等于流出去的物质,要使得m条pipe组成一个循环体,里面流躺物质。并且满足每根pipe一定的流量限制,范围为[Li,Ri].即要满足每时刻流进来的不能超过Ri(最大流问题),同时最小不能低于Li。例如:46(4个点,6个pipe) 12 1 3 (1-&gt;2上界为3,下界为1...原创 2018-05-17 19:19:17 · 528 阅读 · 0 评论 -
洛谷P1251
关于构图: 这是一道最小费用(费用指单价)最大流的题目。 首先,我们拆点,将一天拆成晚上和早上,每天晚上会受到脏餐巾(来源:当天早上用完的餐巾,在这道题中可理解为从原点获得),每天早上又有干净的餐巾(来源:购买、快洗店、慢洗店)。1.从原点向每一天晚上连一条流量为当天所用餐巾x,费用为0的边,表示每天晚上从起点获得x条脏餐巾。 2.从每一天早上向汇点连一条流量为当天所用餐巾x,费用为0的...原创 2018-04-06 21:31:09 · 209 阅读 · 0 评论 -
洛谷P3355
最大流与最小割之间的转换,题目做法类似于P2774方格取数 最多放多少骑士==最少拿走多少 观察图片不难发现:黄色的不能攻击黄色的,红色同理 这一点非常重要,考虑到这一点,就可以把点分为两类,一类连源点,一类连汇点,否则的话很难建图; 那么不难想到二分图匹配 这样就转化成了二分图最小定点覆盖 而二分图最小顶点覆盖==二分图最大匹配。证明可以看这里 从S向红色连边(权重为1),从红色向...原创 2018-04-06 17:39:46 · 240 阅读 · 0 评论 -
洛谷P4016
题目标签写着网络流诶….那么问题就是如何建图了…看到题解里一波大神用平均值来计算…但是蒟蒻没想到诶…所有我就比较暴力了…. 对于每个点一拆为二(ia,ib),建立超源超汇,然后对于每个点,从源点s向其连一条容量为c[i],费用为0的边,从ia向ib连一条容量为无限,费用为0 的边(因为可以不停的把别的地方的货物搬到ia,然后从ib搬到下一个点去,ia到ib搬运当然是不用钱的),然后从ib向汇点t...原创 2018-04-06 11:28:09 · 272 阅读 · 0 评论 -
洛谷P3159
费用流题,构图非常巧妙。 考虑每个点的交换限制的约束,一看就知道是点容量,但是这里不是一分为二,而是一分为三。 首先我们把问题化简,变成对于原图上所有黑点,找到一个新图中的黑点,进行多次交换后到达。我们看到多次交换实际上是走了一条路径(这里不是最短路) 。对于这条路径的起点和终点,仅进行了1次交换,而路径上的其他点都交换了2次。所以我们需要构造一种图来把这个交换次数的差异体现出来,于是: ...原创 2018-03-12 10:21:34 · 194 阅读 · 0 评论 -
洛谷P2053修车
我们把每个人拆成n个点,一共m乘n个,其中任意一个记为a[i,j],也就是第i个人修的倒数第j辆车。这里要注意,这个倒数第j是相对于第i个人的,并不是总体上的倒数第j辆。我们再开n个点,其中任意一个记为k,也就是第k辆车。我们的原始数组,第i个人修第k辆车,记为b[i,k]。把a[i,j]和k一连,就是第i个人倒数第j个修车,修的是第k辆。因为这辆车是倒数第j个修,所以一共要有j辆车等待b[i,k...原创 2018-03-11 22:30:23 · 192 阅读 · 0 评论 -
洛谷P2774方格取数(网络流24题)
我们对棋盘进行黑白染色((横坐标+纵坐标)%2==1的点设为黑点),可以发现,若取一个黑格的点,受到影响的就是周围的白点。于是我们可以建一个二分图。问题是,应该如何建图。如果将每个点考察他能与哪些点相连,显然太复杂了,因此我们不如将每个点与他不能相连的点连接在一起。 然后可以发现这是一个最小割的套路题,假设所有的点都取,然后去掉最小割,就是答案了。 建模:S->黑点,容量为点权 白点-...原创 2018-03-10 17:07:15 · 203 阅读 · 0 评论 -
洛谷P2766最长不下降子序列问题(网络流24题)
【问题分析】第一问时LIS,动态规划求解,第二问和第三问用网络最大流解决。【建模方法】首先动态规划求出F[i],表示以第i位为开头的最长上升序列的长度,求出最长上升序列长度K。1、把序列每位i拆成两个点i.a和i.b,从i.a到i.b连接一条容量为1的有向边。2、建立附加源S和汇T,如果序列第i位有F[i]=K,从S到i.a连接一条容量为1的有向边。3、如果F[i]=1,从...原创 2018-03-10 11:51:10 · 339 阅读 · 0 评论 -
洛谷P2765魔术球问题(网络流24题)
首先我们考虑如何建图,即表达相邻球之间的关系。 可以将一个球拆点为Ai和Bi,先从源点S向Ai连容量为1的边,从B_i 向汇点连容量为1的边。对于能够与它编号和为完全平方数的球j,连接A_j和Bi。 枚举球数,球数每增加1就建立新加入的球的关系,并且重复地跑最大流。柱子数对于球数存在一种单调递增的相关关系,我们这样可以求出某一柱子数下最多能放置的球数,因为当新加入的球能够加入柱子时,重复跑最大...原创 2018-03-10 09:59:00 · 262 阅读 · 0 评论 -
(模板)二分图最大匹配,最大流算法
转换为最大流做即可。注意加边的技巧。 代码如下:#include<cstdio>#include<iostream>#include<algorithm>#include<cstring>#include<vector>#include<queue>using namespace std;struc...原创 2018-03-09 23:08:35 · 1639 阅读 · 1 评论 -
(模板)最小费用流
最大流+SPFA结合体,小心即可。#include<cstdio>#include<iostream>#include<vector>#include<queue>#include<algorithm>#include<cstring>using namespace std;struct edge{ ...原创 2018-03-09 20:06:28 · 175 阅读 · 0 评论 -
POJ2987 (最大权闭合图)
题意:老板决定裁员,每开除一个人,同时要将其下属一并开除,如果该下属还有下属,照斩不误。给出每个人的贡献值和从属关系,求最小裁员数及最大贡献值和。 其实题目要求的是最大权闭合图,所谓闭合图,指的是图中每个点的后续都在图中。最大权闭合图,指的是点的权值之和最大的闭合图。 定理:最大权闭合图的的权=原图中权值为正的点权和 - 最小割(最大流)最大权闭合图的求解方法是: 先构造网络流N,添...原创 2018-03-09 10:51:15 · 258 阅读 · 0 评论 -
洛谷P1345
原来刚学网络流的时候10分钟搞定的…今天突然想了半天没想懂QAQ….果然还是蒟蒻本色… 这道题的做法其实说起来也很简单,就是:将点x+n和y,y+n和x连边权为INF,再将每一个点i和i+n连边权为1的边,以c1+n为源点,c2为汇点跑最大流就可以了。 为什么要拆点?因为我们要保证每个点相当于只能被删除一次,删除这条边就相当于删了这个点。 怎么看待原图中本来就存在的边呢?它们只是有一个联通的...原创 2018-03-08 21:01:56 · 176 阅读 · 0 评论 -
有上下界的网络流 做法总结
无源汇可行流建图方法 将有上下界的网络流图转化成普通的网络流图首先建立附加源点ss和附加汇点tt 对于原图中的边x-&amp;gt;y,若限制为[b,c],那么连边x-&amp;gt;y,流量为c-b 对于原图中的某一个点i,记d(i)为流入这个点的所有边的下界和减去流出这个点的所有边的下界和 若d(i)&amp;gt;0,那么连边ss-&amp;gt;i,流量为d(i) 若d(i)&amp;lt;0,那么连原创 2018-05-30 21:58:03 · 574 阅读 · 0 评论