![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
网络流
EMber _
人但有追求,世界亦会让路。
展开
-
hdu3549 SAP+GAP
超级久没打过网络流了,感觉要完(van)。。 于是找了个练手的题目来搞一波,决定最近做几道题目巩固一波。 (%%%hzwer网络流24题) 题意很简单,就是模板来着的。。原本我不准备写SAP的讲解的,然而当我在网上找了半天都没找到稍微漂亮一点的SAP之后我就愤然决定造福人类。 SAP+GAP+弧优化; 我们先来讲解一下SAP SAP主要过程讲起来简单,但是实现稍微有点复杂。 从原创 2016-10-22 09:46:07 · 244 阅读 · 0 评论 -
bzoj [Usaco2005 mar]Ombrophobic Bovines 发抖的牛 最大流
很好的题目= =并没有想出正解= = 首先二分最短的路径x 然后每次二分的时候跑最大流。 每个牛拆成i和i’,起点向i连容量为数量的边,i’向终点连容量为容量的边。 如果i,j最短路小于二分的答案x就连i和j’容量为inf。#include<cstdio>#include<cstring>#include<algorithm>#define fo(i,a,b) for(int i=a;原创 2017-06-05 09:50:30 · 314 阅读 · 0 评论 -
bzoj1733[Usaco2005 feb]Secret Milking Machine 神秘的挤奶机
明显二分答案。 然后对于这种求路径数量的一般都用网络流= = 每次二分出一个x,边小于等于x的才连,然后容量都为1,s到1和n到t连容量为要求路径总数的边,由于是双向边所以要连两次= =。#include<cstdio>#include<cstring>#include<algorithm>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fd原创 2017-06-05 11:07:39 · 351 阅读 · 0 评论 -
bzoj2406 矩阵 二分+有源汇上下界网络流
题意略。%%ymw大神,考场上直接切。 先二分答案。 然后连边,先预处理一下横行纵行的前缀和,然后b的每行每列取值范围就是r[i]-mid,r[i]+mid,列同理。 那么我们把横行和纵行看做点,拆成两部分形成一个二分图,横行纵行之间连边,容量为(r[i]-mid,r[i]+mid),列同理。 然后跑可行流来判断。 如果要求输出答案的话提前记录一下就好了。#include<cstdio>原创 2017-07-15 20:39:10 · 223 阅读 · 0 评论 -
bzoj2424 [HAOI2010]订货 费用流
由于太久没有打费用流导致我第一眼以为是DP。。。 这就是裸的费用流,先把每个月看作一个点. 然后 S到每个点i,连容量为inf,费用为单价的边 每个点i到T,连容量为需求,费用为0的边。 最后每一个点连向下一个点,费用为m,容量为s,这个很好理解吧。 然后跑一边费用流就好了。 //定义的数组名字意思和实际意思不同搞得我很难受= =#include<cstdio>#include<al原创 2017-07-20 17:29:58 · 173 阅读 · 0 评论 -
bzoj2756[SCOI2012]奇怪的游戏 二分 分类讨论 最大流
细节比较多的一道题目。 题意:给你一个矩阵,每次能把相邻的两个数都+1,问你最少多少次能把整个矩阵的数都变成同一个数。 网络流的模型比较明显,但是正解的话考场上可能不容易想到= =。 先把整个网格图黑白染色,设格子数和总和分别为num1,sum1,num2,sum2. 那么假设最终变成了X,那么最后的答案肯定是X*num1-sum1,即添加了多少次。 然后我们分类讨论。 num1!=nu原创 2017-07-30 20:50:38 · 220 阅读 · 0 评论 -
bzoj2718/1143 CTSC2008 祭祀 最长反链
经典题来着。。 其实就是求最长反链。 然后我们有Dilworth定理: 1.最长链=最长反链覆盖 2.最长反链=最长链覆盖 第一个我还没见过,等一下去查一查。第二个就是我们要用到的了。 证明http://vfleaking.blog.163.com/blog/static/1748076342012918105514527/ 那么最长链覆盖=N-最大匹配。 那么很显然了,直接连边跑最原创 2017-07-31 15:34:21 · 256 阅读 · 0 评论 -
二分图大讲堂——彻底搞定最大匹配数(最小覆盖数)、最大独立数、最小路径覆盖、带权最优匹配
文本内容框架: §1图论点、边集和二分图的相关概念和性质 §2二分图最大匹配求解 匈牙利算法、Hopcroft-Karp算法 §3二分图最小覆盖集和最大独立集的构造 §4二分图最小路径覆盖求解 §5二分图带权最优匹配求解 Kuhn-Munkers算法 §6小结 每章节都详细地讲解了问题介绍,算法原理和分转载 2017-07-31 15:50:23 · 956 阅读 · 0 评论 -
bzoj3996[TJOI2015]线性代数 网络流
Description给出一个N*N的矩阵B和一个1*N的矩阵C。求出一个1*N的01矩阵A.使得D=(A*B-C)*A^T最大。其中A^T为A的转置。输出D Input第一行输入一个整数N,接下来N行输入B矩阵,第i行第J个数字代表Bij. 接下来一行输入N个整数,代表矩阵C。矩阵B和矩阵C中每个数字都是不超过1000的非负整数。 Output输出最大的DSample Input31 2 1原创 2017-08-03 09:32:14 · 281 阅读 · 0 评论 -
5331. 【NOIP2017提高A组模拟8.23】壕游戏 费用流 动态连边
题意:n个点m条边,每条边有一个经过次数限制ci,假设经过了x次,第x次费用为ai*x+bi,有s个终点,要跑k次,问最小总费用多少。 巨鬼畜,连边只按照第一次的连,然后费用流的时候每流一条边然后再连下一条边。。 我好菜啊,ymw随手AK。#include<cstdio>#include<algorithm>#include<cstring>#include<queue>#define原创 2017-08-23 14:51:30 · 275 阅读 · 0 评论 -
loj6001「网络流 24 题」太空飞行计划 最小割(最大权闭合图复习)
题意可知要求最大权闭合图,那么按照结论答案是正权值-最小割(最大流) 复习一下最大权闭合图:建图方法:源点S向正权点连容量为权值的边,负权点向汇点T连容量为权值绝对值的边。正权和负权点之间连容量为inf的边。证明:根据题意可知,一对点i,j,假如i为正j为负那么i,j满足依赖关系:选了i一定要选j。从最小割角度来思考,如果我选了i而不选j,那么S,T联通,不满足最小割性质。如果i为负而j为原创 2017-09-04 21:45:00 · 240 阅读 · 0 评论 -
bzoj1711 [Usaco2007 Open]Dining吃饭 最大流
你看题目里都有个dini肯定正解是dinic啦 这道三分图匹配还不错。 把每头牛拆成两份,一份连喜欢的食物另一个连饮料。 两份互相连。 食物和饮料一个和起点连一个和终点连。 所有流量都是1.#include<cstdio>#include<algorithm>#include<iostream>#include<cstring>#define fo(i,a,b) for(int i原创 2017-05-29 19:54:29 · 285 阅读 · 0 评论 -
网络流24题 负载平衡 费用流
转化成供求平衡以后直接连就好了。。#include<cstdio>#include<algorithm>#include<iostream>#include<cstring>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fd(i,a,b) for(int i=a;i>=b;i--)#define T 2001using namespace原创 2017-04-26 16:14:53 · 260 阅读 · 0 评论 -
bzoj1877 SDOI2009晨跑 费用流
复习的第三道费用流,拆点以后直接跑。 话说现在省选季也快结束了,弥漫着一股悲伤的气氛(雾) 认识的dalao好像都考挂了(大雾)没考挂的发挥好像也不是很好#include<cstdio>#include<algorithm>#include<iostream>#include<cstring>#define fo(i,a,b) for(int i=a;i<=b;i++)#define原创 2017-04-23 16:54:27 · 234 阅读 · 0 评论 -
网络流24题04 魔术球问题
Description 假设有n根柱子,现要按下述规则在这n根柱子中依次放入编号为1,2,3,4的球。 (1)每次只能在某根柱子的最上面放球。 (2)在同一根柱子中,任何2个相邻球的编号之和为完全平方数。 试设计一个算法,计算出在n根柱子上最多能放多少个球。例如,在4 根柱子上最多可放11 个球。编程任务: 对于给定的n,计算在n根柱子上最多能放多少个球。Input Format 文件第原创 2017-04-09 15:08:22 · 373 阅读 · 0 评论 -
网络流24题 05圆桌聚餐
题目描述 假设有来自 n n 个不同单位的代表参加一次国际会议。每个单位的代表数分别为 r_i r i 。会议餐厅共有 m m 张餐桌,每张餐桌可容纳 c_i c i 个代表就餐。 为了使代表们充分交流,希望从同一个单位来的代表不在同一个餐桌就餐。试设计一个算法,给出满足要求的代表就餐方案。 输入格式 文件第 1 1 行有 2 2 个正整数 m m 和 n n, m原创 2017-04-09 21:35:22 · 372 阅读 · 0 评论 -
bzoj1305[CQOI2009]dance跳舞
网络流是真的难想到正解。。%po姐姐的题解: 将一个人拆成两个点,点1向点2连一条流量为k的边,两个人若互相喜欢则点1之间连边,不喜欢则点2之间连边 对于每一个要验证的x值 将每个人的点1向源或汇连一条流量为x的边 然后二分答案跑最大流即可#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>#def原创 2017-04-09 22:21:04 · 231 阅读 · 0 评论 -
bzoj1433[ZJOI2009]假期的宿舍
输出要用puts!!!!! 输出要用puts!!!!! 输出要用puts!!!!! 重要的事情说三遍。。分析:比较简单的网络流了,人向源连边,床向汇点连边,人向能睡的床连边,跑最大流,看看能不能全部睡咯。事实上,其实这也是网络流的经典套路,基本上能把题目化成两堆点,一堆向源连边,一堆向汇连边,然后两堆点之间互相连边。。#include<cstdio>#include<cstring>#in原创 2017-04-10 09:18:59 · 236 阅读 · 0 评论 -
网络流24题 飞行员配对
随便连边,做了一定题目以后发现网络流套路还是比较浅的,当然仅限于简单题。#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>#include<cmath>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fd(i,a,b) for(int i=a;i>=b;原创 2017-04-10 22:12:55 · 198 阅读 · 0 评论 -
bzoj1412 狼和羊的故事 最小割
分析:套路太naive了,随便搞,起点向羊,狼连终点,然后能互相到达的狼和羊连长度为1的边,空地全连,跑最小割。#include<cstdio>#include<algorithm>#include<cstring>#include<iostream>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fd(i,a,b) for(int i=a;i原创 2017-04-18 10:20:01 · 253 阅读 · 0 评论 -
bzoj2127 hapiness 最小割
”我整个人都最小割了“—hzwer.. 分析: s->A:cost[A文]+c[文][A][B]/2,s->B:cost[B文]+c[文][A][B]/2;A->t:cost[A理]+c[理][A][B]/2,B->t:costB[理]+c[理][A][B]/2;A<–>B:c[文][A][B]/2+c[理][A][B]/2 这样就会出现两种割,分别对应两个人同选和不同选。#include<c原创 2017-04-18 10:53:54 · 186 阅读 · 0 评论 -
bzoj2768[JLOI2010]冠军调查
水水的最小割。#include<cstdio>#include<algorithm>#include<cstring>#include<iostream>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fd(i,a,b) for(int i=a;i>=b;i--)#define T 301#define inf 0x7fffffff us原创 2017-04-18 11:23:52 · 372 阅读 · 0 评论 -
bzoj1497 NOI2006 最大获利 最小割
woc我真的想打人了,inf值如果不调到最大就tle是什么鬼?????我整整调了将近一个小时啊淦! 。。 连边的话,看amber的论文就好了,然后形成最大权封闭子图,s向正权点连边,负权点向t连边,容量都为权值,可以证明一个方案和一个割一一对应。/************************************************************** Problem:原创 2017-04-16 10:23:16 · 862 阅读 · 0 评论 -
codevs 1922 骑士共存问题 最小割
分析:比较经典的最小割题目,我们把横纵坐标之和%2=0的位置标记为二分图的左半部分,另外的作为右半部份,当然删除掉的不能用的。 然后s向左半部分连边,右半部分向T连边。对于能够互相到达的点,连长度为inf的边(保证最小割不会包含可以互相到达的点),然后可以证明互相到达的两个点,肯定属于不同的部分,然后跑最小割,答案就是n^2-m-ans. 手残打错了一些小细节,,非常不应该啊。。还是打得不是很熟原创 2017-04-16 22:31:42 · 302 阅读 · 0 评论 -
loj6002网络流 24 题 最小路径覆盖 最大流
[每日一题网络流] 最小路径覆盖=n-最大匹配。 直接跑就好了。 还是不是很懂怎么构造方案。。#include<cstdio>#include<algorithm>#include<cstring>#include<queue>#define T n+m+2#define fo(i,a,b) for(int i=a;i<=b;i++)#define fd(i,a,b) for(in原创 2017-09-05 18:45:11 · 240 阅读 · 0 评论