
网络流
文章平均质量分 77
njlcazl
这个作者很懒,什么都没留下…
展开
-
【poj1637】【最大流】Sightseeing tour
这道题是一个混合图欧拉回路问题。建图方法:将无向图随意定向,计算每个点的入度和出度,令calc[i] =abs(in[i] - out[i])/2。如果calc[i]为奇数,那么肯定不存在欧拉回路;如果所有点calc[i]都为偶数,那么先将有向边删去,然后按照一开始的定向方法构图,并且对于每个入度小于出度的点则添加一条源点到该点的边,容量为calc[i];反之则连一条该点到汇点的边,容量为原创 2013-03-04 21:44:37 · 426 阅读 · 0 评论 -
【spoj1693】【最小割】Coconuts
经典的“二式取其一式问题”。建模方法:每名守卫i作为一个点,若他投赞成票,连边(s,i,1),否则连边(i,t,1)如果i与j是朋友,则加边(i,j,1),(j,i,1) (容量表示的意义是违反的代价)然后求一次最小割即为答案。这道题我用邻接表无限TLE,改为邻接矩阵后就AC了,原因为插入的常数较大。所以在题目中要根据情况来考虑存储结构。代码:#include#include原创 2013-03-26 20:54:18 · 609 阅读 · 0 评论 -
【hoj2713】【最小割】Matrix1
题意:一个n*m的网络,每个单元都有一块价值Cij的宝石,问最多能取多少价值的宝石且任意两块宝石不相邻。经典的最大点权独立集问题,一个很巧妙的转化,转化为最小点权覆盖。将网格黑白染色,从源点到每个黑点连一条边,从每个白点到汇点连一条边,容量均为宝石价值。每个黑色与周围四个白点连边,为inf,做一次最小割,即为最小点权覆盖,记为tmp,则ans = ∑Cij - tmp代码:原创 2013-03-24 22:00:14 · 734 阅读 · 0 评论 -
【poj3281】【最大流】Dining
一道最大流的简单题。将食物和饮料分别看成一个点集,食物放在左边(记为f[i]),饮料放在右边(记为d[i])。然后将每头牛拆成两个点k,k'然后开始建图:1、对于每头牛喜欢的食物和饮料:添加edge(f[i],k,1),edge(d[i],k',1),edge(k,k',1),这样做的目的是为了限制每头牛只能享用一种食物和饮料。2、对于每个食物和饮料:添加edge(s,f[i],1原创 2013-03-20 21:59:58 · 593 阅读 · 0 评论 -
【NOI2006】【最大流】最大获利
Amber在论文中所提到的最大权闭合子图问题,跟上一题类似。建图:对于每个中转站k,成本为w,连边(k,t,w);对于每个用户群g,盈利为w,连边(s,g,w),然后对用户群盈利所需的中转站a,b连边(g,a,∞),(g,b,∞),ans = ∑盈利 - maxflow至于证明的话,比较复杂,可以见胡伯涛《最小割模型在信息学竞赛中的应用》代码:#include#include原创 2013-03-22 17:58:25 · 1067 阅读 · 0 评论 -
【hoj2634】【最小割】How to earn more
借用Edelweiss的话,此题是典型的“蕴含式最大获利问题”,使用解决最大权闭合子图的建模方法即可解决。每个项目i作为一个点并连边(s,i,Ai),每名员工j作为一个点并连边(j,t,Bj),若项目i需要雇佣员工j则连边(i,j,∞)。设最小割为ans,则∑Ai - ans即为结果代码:#include#includeusing namespace std;const in原创 2013-03-22 11:10:41 · 659 阅读 · 0 评论 -
【zoj2760】【最大流】How Many Shortest Path
求一个带权有向图中s-t边不相交最短路最多有几条。建图方法:分别从源点和汇点作一次dijkstra,然后建一个满足ds[u] + w[u][v] + dt[v] == ds[t]这样的关系的导出子图,这样做是为了保证网络图中任意一条s-t的路都是最短路,每条边的容量都为1,然后做一次最大流就行了。另外这道题比较坑的地方是:矩阵对角线上的长度不一定为0。。。代码:#include原创 2013-03-22 08:31:56 · 741 阅读 · 0 评论 -
【BASHU 2445】【最小费用最大流】餐巾问题
非常巧妙的构图题。建模方法:将每一天拆成两个点i,i',加下列边(s,i,ri,p)——在第i天可以买至多ri个餐巾,每块p分(i,t,ri,0)——在第i天要用ri块餐巾(s,i',ri,0)——在第i天用剩的ri块旧餐巾(i',i+m,inf,f)——第i天的旧餐巾送到快洗部,每块f分(i',i+n,inf,s)——第i天的旧餐巾送到慢洗部,每块s分(i',i'原创 2013-04-01 21:27:45 · 837 阅读 · 0 评论 -
【ZJOI2010】【最大流】【最小费用最大流】网络扩容
第一问就是一个最大流的裸题。第二问的话思维难度也不大,一开始加边的时候费用为0,然后如果原图有边,就加入一条对应的流量无限,费用为扩容费用的边,要注意的是如果有重边需要选择费用最小的一条,再加一个源点s,连边s-t,流量为k,费用为0的边,然后做一次最小费用最大流就可以了。代码:#include#include#includeusing namespace std;cons原创 2013-03-18 22:07:29 · 545 阅读 · 0 评论 -
【hoj2715】【最小费用最大流】Matrix3
跟方格取数有点类似,只是有了高度的限制。建模方法:1、将每个格子i拆成两个点i',i'',加边(i',i'',1,-Vi)-> 保证单元内的宝物只能取一次。2、加边(i',i'',inf,0),(s,i',k,0) ->保证一开始可以从任意高度出发。(注意源点s到i'的容量不能为inf)3、对相邻的四个格子j,若Hi > Hj则加边(i'',j',inf,0) ->保证原创 2013-03-28 20:50:07 · 775 阅读 · 1 评论 -
【spoj371】【最小费用最大流】BOXES
比较简单的一道费用流。建模方法很直观:若sum[i] > 1,连边(s,i,sum[i] - 1,0)若sum[i] = 0,连边(i,t,1,0)对于每个格子i的相邻格子j连边:(i,j,inf,1)一次最小费用最大流即可。代码:#include#includeusing namespace std;const int inf = 0x3f3f3f3f;con原创 2013-03-29 17:53:46 · 606 阅读 · 0 评论 -
【poj1187】【最大流】PIGS
经典的最大流模型,按照下列规则建出网络图,然后做一次最大流即可。• 每个顾客分别用一个结点来表示。• 对于每个猪圈的第一个顾客,从源点向他连一条边,容量就是该猪圈里的猪的初始数量。如果从源点到一名顾客有多条边,则可以把它们合并成一条,容量相加。• 对于每个猪圈,假设有 n 个顾客打开过它,则对所有整数 i∈[1, n),从该猪圈的第 i 个顾客向第 i + 1 个顾客连一条边,容量为∞原创 2013-02-28 21:01:17 · 586 阅读 · 1 评论 -
【SCOI2012】【二分法】【最大流】奇怪的游戏
这道题初看也许会感觉无法下手,由于每次操作都是相邻的两个,所以可以考虑将棋盘黑白染色,这样我们可以对黑色的格子和白色的格子单独考虑。设黑色格子个数为cnt1,总和为sum1,白色格子个数为cnt2,总和为sum2,最终所有格子都变成了x,则很容易写出下列的关系式: cnt1 * x - sum1 = cnt2 * x - sum2=> x * (cnt1 - c原创 2013-03-28 17:24:41 · 1109 阅读 · 0 评论