
网络流总不会建图
stone41123
一名苦逼的OIer,欢迎交朋友。。。
展开
-
图论--网络流初步(最大流,增广路)
以下内容为提高+难度。 首先,以一个问题来引入算法: 最大流问题,该问题描述如下: 管道网络中每条边的最大通过能力(容量)是有限的,实际流量不超过容量。 最大流问题(maximum flow problem),一种组合最优化问题,就是要讨论如何充分利用装置的能力,使得运输的流量最大,以取得最好的效果。关于最大流问题还有许多定义,具体参见紫书(算法竞赛入门经典)的P366,有详细说原创 2017-08-12 00:42:14 · 1018 阅读 · 0 评论 -
网络流24题:餐巾计划问题
传送门 这个题我一开始没把tot赋值成-1,然后调了1h。。 然后只拿了20,看了题解才知道漏了一种情况,那就是其实餐巾是可以留到第二天的。。 然后就没了。 对了,忘说做法了(尴尬),其实就是拆点,分别连边,实现题目中的三种操作,具体可以看我的代码:#include<cstdio>#include<cstring>#include<iostream>#include<cmath>#i原创 2017-11-14 14:00:40 · 288 阅读 · 0 评论 -
[jzoj1637]【ZJOI2009】狼和羊的故事
Description “狼爱上羊啊爱的疯狂,谁让他们真爱了一场;狼爱上羊啊并不荒唐,他们说有爱就有方向......” Orez听到这首歌,心想:狼和羊如此和谐,为什么不尝试羊狼合养呢?说干就干! Orez的羊狼圈可以看作一个n*m个矩阵格子,这个矩阵的边缘已经装上了篱笆。可是Drake很快发现狼再怎么也是狼,它们总是对羊垂涎三尺,那首歌只不过是一个动人的传说而已。所以Orez决定在羊原创 2017-11-19 10:46:00 · 233 阅读 · 0 评论 -
洛谷P2045:方格取数加强版
传送门 一看题意,发现第二次取就是0了,那么就想到了网络流(其实是看标签) 费用流建图: 1.首先S向(1,1)连一条费用为0,容量k的边 2.然后(n,n)向T连一条费用为0,容量k的边 3.每个点(i,j)向(i+1,j)和(i,j+1)连一条费用0,容量k的边(此处注意判边界) 4.每个点拆成入点和出点,然后入点向出点连一条容量1,费用Ai,jA_{i,j}的边 5.然后再入点向原创 2017-11-15 11:18:04 · 355 阅读 · 0 评论 -
[SCOI2007]修车
传送门 这个题好像十分经典呀,去雅礼的时候某位大佬讲课的时候提到过,然而我当时还不会费用流。。。 其实就是基于这么一个显然的结论: 对于一个修车工先后用W1−WnW_1-W_n的几个人,花费的总时间是 W1∗n+W2∗(n−1)+⋅⋅⋅+Wn∗1W_1*n+W_2*(n-1)+···+W_n*1 于是我们就可以拆点了,把每个工作人员拆成n个点,分别代表n个阶段,然后暴力连边,直接跑费用流就原创 2017-11-15 14:30:21 · 280 阅读 · 0 评论 -
[CQOI2012]交换棋子
传送门 此博客无讲解,讲解可以看hzwer 这个题还是比较巧妙的,把点权转换成边权,这个没什么,常用技巧。 主要觉得比较妙的是那个+1然后/2,这一步感觉很妙,而且这次拆成3个点,很妙。 (其实我这个博客就是来吐槽一波。。) 代码:#include<cstdio>#include<cstring>#include<iostream>#include<cmath>#include<a原创 2017-11-16 10:25:22 · 308 阅读 · 0 评论 -
[SDOI2011]工作安排
传送门 这个题我不知道为什么被卡到85,或许是我写的丑? 其实就是暴力拆点连边,分段函数就一段一条边就好了。 代码:#include<cstdio>#include<cstring>#include<iostream>#include<cmath>#include<algorithm>#include<cstdlib>#define ll long longusing names原创 2017-11-16 17:08:52 · 224 阅读 · 0 评论 -
[HAOI2010]订货
传送门 继续刷水题。。 这个题建图也很明显,就是拆点直接连边就好了,具体可以看我的代码。。 代码:#include<cstdio>#include<cstring>#include<iostream>#include<cmath>#include<algorithm>#include<cstdlib>#define ll long longusing namespace std;原创 2017-11-16 17:28:57 · 204 阅读 · 0 评论 -
[NOI2010]:海拔
传送门 想了想就发现其实就是求一个最小割,然后dinic直接上,只有90分 好像正解是对偶图SPFA最短路,以后再来补吧。。 代码:(dinic)#include<cstdio>#include<cstring>#include<iostream>#include<cmath>#include<algorithm>#include<cstdlib>#define R registe原创 2017-12-17 08:30:29 · 315 阅读 · 0 评论 -
上下界网络流(3合1)
我打的是LOJ的板子,因为比较全无源汇上下界可行流有源汇上下界最大流有源汇上下界最小流无源汇上下界可行流具体做法就是将每一条限制为[L,R]的边(u,v)拆开 连接(s,v)容量为L,(u,t)容量为L,(u,v)容量为R-L 大家可以感性地理解一下 数据范围大的时候,可以先记录每个点与起点终点的流量,最后减一减,一起连边就好了 代码:#includ原创 2018-01-10 14:54:39 · 224 阅读 · 0 评论 -
网络流24题:试题库问题
传送门 这个题好像比较水。 每个种类向汇点连容量为所需求的数量的边 然后每个试题向可以选的种类连容量为1的边 再从源点向每个试题连容量为1的边,然后dinic 过程中记录一下转移的目标节点,然后输出路径就好了 判无解不用我说了吧。 代码:#include<cstdio>#include<cstring>#include<iostream>#include<cmath>#incl原创 2017-11-13 19:27:45 · 248 阅读 · 0 评论 -
[SDOI2013]费用流
传送门 这个题好神奇呀 我一开始看错题了,然后就一直在想怎么做,然后看了题解发现自己的思路全错了。。 题解是二分+最大流 其实我们可以先从第二个人开始考虑 假如已经确定了一个最大流方案,那么他要怎么分配费用呢? 由于总费用固定,那么我们就要让这些费用影响到的流量尽可能地多 所以,显然的结论就是:最优策略就是将所有的流量都放在最大流量的边上 所以第一个人要让费用最小,那么其实就是要让流原创 2017-11-17 16:29:43 · 250 阅读 · 0 评论 -
图论--最小费用最大流(MCMF)
以下为提高+难度。关于这个算法我不多做阐述,因为我说的肯定没有lrj大神说得好,大家可以看他的书–《算法竞赛入门经典》,那里有详细描述。 到了这种难度,极其建议大家去抄抄代码,过一遍手,比什么都强。 我也是这一遍抄完了,才感觉这两天的网络流明白了。下来就是代码。 code://洛谷 P3381 【模板】最小费用最大流#include<bits/stdc++.h>#define ll lon原创 2017-08-12 22:40:40 · 541 阅读 · 0 评论 -
洛谷“测试”(这是一场比赛)T3 隔离(最小割)
题目背景zx大佬依然秒切。lXz发现世界变得不一样了,他昨天所喜爱的一切都变得一团糟。 他决定造一堵墙把自己和世界隔离开。题目描述有一个大小为 n×m 的矩阵,在每一个位置造墙付出代价 a[i][j],lXz 站在(x,y), 不允许在(x,y)处造墙,保证(x,y)不在边界上。两个格子如果有一条公共边且都不为墙则 可以互达。边界上的格子,如果不是墙就与外界连通。lXz要选择一些位置造墙,使得从(x原创 2017-10-13 18:33:53 · 432 阅读 · 0 评论 -
[bzoj1475]方格取数问题(最大点权独立集)
传送门p.s:这好像是权限题,我还是放一下题面吧。。Description在一个n*n的方格里,每个格子里都有一个正整数。从中取出若干数,使得任意两个取出的数所在格子没有公共边,且取出的数的总和尽量大。Input第一行一个数n;(n<=30) 接下来n行每行n个数描述一个方阵Output仅一个数,即最大和Sample Input2 1 2 3 5Sample Output6题解题目很简单,说的就原创 2017-10-16 17:36:29 · 354 阅读 · 0 评论 -
[bzoj1497]NOI2006最大获利(最大权封闭子图)
传送门 这个题是一个最大权封闭子图,具体建图可以看hzwer 然后关于最大权封闭子图的解法可以看这两篇 这篇详细:http://www.cnblogs.com/wuyiqi/archive/2012/03/12/2391960.html 这篇清晰:http://blog.youkuaiyun.com/qq_33229466/article/details/51018916 然后应该就懂了。 代码:#原创 2017-10-16 18:08:43 · 333 阅读 · 0 评论 -
[codevs1993]草地排水(最大流裸题)
传送门 没什么可说的 代码:#include<cstdio>#include<cstring>#include<iostream>#include<cmath>#include<algorithm>#include<cstdlib>#include<queue>#define ll long longusing namespace std;inline int read(){原创 2017-10-16 18:20:50 · 334 阅读 · 0 评论 -
[codevs1022]覆盖(染色+二分图最大匹配)
传送门 将格子染色之后就可以将问题转化成二分图最大匹配的问题了。 代码:#include<cstdio>#include<cstring>#include<iostream>#include<cmath>#include<algorithm>#include<cstdlib>#include<queue>#define ll long longusing namespace st原创 2017-10-16 18:40:42 · 290 阅读 · 0 评论 -
网络流24题:太空飞行计划问题
传送门 我就是抄的题解,具体还是看题解。 这题输入坑。。 话说我好像没用题解的isap,我用的dinic 代码:#include<cstdio>#include<cstring>#include<iostream>#include<cmath>#include<algorithm>#include<cstdlib>#include<vector>#define ll long原创 2017-11-13 14:06:54 · 232 阅读 · 0 评论 -
网络流24题:最小路径覆盖问题
传送门 贴一下BYvoid的讲解: 【问题分析】 有向无环图最小路径覆盖,可以转化成二分图最大匹配问题,从而用最大流解决。 【建模方法】 构造二分图,把原图每个顶点i拆分成二分图X,Y集合中的两个顶点Xi和Yi。对于原图中存在的每条边(i,j),在二分图中连接边(Xi,Yj)。然后把二分图最大匹配模型转化为网络流模型,求网络最大流。 最小路径覆盖的条数,就是原图顶点数,原创 2017-11-13 15:34:19 · 218 阅读 · 0 评论 -
网络流24题:最长递增子序列问题
传送门 话说洛谷真好呀,网络流24题好像基本都有 好了,说做法。 先贴BYvoid的做法: 【问题分析】 第一问时LIS,动态规划求解,第二问和第三问用网络最大流解决。 【建模方法】 首先动态规划求出F[i],表示以第i位为开头的最长上升序列的长度,求出最长上升序列长度K。 1、把序列每位i拆成两个点< i.a>和< i.b>,从< i.a>到< i.b>连接一条容原创 2017-11-13 16:37:22 · 302 阅读 · 0 评论 -
[NOI2008]:志愿者招募
传送门 我们设第i类的志愿者的数量为Xi,工作区间为[Si,Ti] 设第i天的志愿者需求量为Ai,那么合法条件下就有以下几个不等式: (以下均为样例) P1 : X1>=A1 P2 : X1+X2>=A2 P3 : X2+X3>=A3 (其中Pi代表第i个不等式) 然后这个不等式非常不爽,我们可以添加n个辅助变量Yi,使它变为等式: P1 : X1+Y1=A1 P2 : X1+原创 2018-01-28 11:54:05 · 1627 阅读 · 0 评论