【codevs1028】花店橱窗布置(费用流)
这几天刚学了费用流,找到了这道题来练一练手。
题目:
假设以最美观的方式布置花店的橱窗,有F束花,V个花瓶,我们用美学值(一个整数)表示每束花放入每个花瓶所产生的美学效果。为了取得最佳的美学效果,必须使花的摆放取得最大的美学值。
第一行为两个整数F,V(F<=V<=100)
接下来F行每行V个整数,第i行第j个数表示第i束花放入第j个花瓶的美学值。
一个整数,即最大美学值。
2 2
10 0
5 2
12
这道题很明显是二分图的最大权匹配,可以用最大费用最大流来做。做法:首先先建图,在源点到每束花之间连一条流量为1,花费0为的点(每束花只能用一次),在每个花屏到汇点之间连一条流量为1,花费为0的边(每个花瓶只能用一次),然后再在每束花和每个花瓶之间连一条流量为1,权值为这种匹配的美学值的边;然后就用spfa找增广路,建反向边时,反向边的流量是这条增广路的流量,花费是原边的花费的相反数。
一开始写的时候受了最大流的影响,也像最大流那样建了分层图,于是WA了两次也找不出错。后来把分层图删掉才能AC。其实分层图的作用就是避免出现环造成死循环,而用spfa来找增广路,就已经避免了这个问题,反而会把原图中的一些边删掉,所以费用流中千万不要用分层图。
代码:
var a,c:array[..,..]of longint;//a是原图,c是花费的图
fa,d:array[..]of longint;//fa[i]是在到i的最短路径上i的前一个点(前驱结点),d[i]是到i的最短路径的距离
b:array[..]of boolean;//记录是否在队列中
q:array[..]of longint;//队列
n,m,i,j,k,p,t,h,sum:longint;
procedure spfa(s:longint);//spfa模板
var i,h,t:longint;
begin
for i:= to n do begin
d[i]:=-<<; b[i]:=true;//初始化
end;
h:=; t:=; q[]:=s; d[s]:=; b[s]:=false; fa[s]:=-;//初始化2
repeat
for i:= to n do
if(a[q[h],i]>)and(d[q[h]]+c[q[h],i]>d[i])then begin//判断是否有边,是否更优
d[i]:=d[q[h]]+c[q[h],i]; fa[i]:=q[h];//更新距离
if b[i] then begin
inc(t); q[t]:=i; b[i]:=false;//入队
end;
end;
b[q[h]]:=true; inc(h);//出队
until h>t;
end;
function flow(s,t:longint):longint;
var p,min:longint;
begin
spfa(s);
if d[t]=-<< then exit();//判断是否有增广路
p:=t; min:=<<;
while fa[p]>= do begin
if min>a[fa[p],p] then min:=a[fa[p],p];//从汇点访问到源点,计算流量
p:=fa[p];
end;
p:=t;
while fa[p]>= do begin
c[p,fa[p]]:=-c[fa[p],p];//建反向边1
a[fa[p],p]:=a[fa[p],p]-min; a[p,fa[p]]:=a[p,fa[p]]+min;//建反向边2
p:=fa[p];
end;
sum:=sum+d[t];//加上这次增广的花费,更新答案
exit(min);
end;
begin
read(n,m);
for i:= to n do begin
a[,i]:=; c[,i]:=;//建图1
end;
for i:= to m do begin
a[i+n,n+m+]:=; c[i+n,n+m+]:=;//建图2
end;
for i:= to n do
for j:= to m do begin
read(k); a[i,n+j]:=; c[i,n+j]:=k;//建图3
end;
n:=n+m+; sum:=; k:=;
while k> do k:=flow(,n);//一行费用流
writeln(sum);//输出最大美学值
end.
【codevs1028】花店橱窗布置(费用流)的更多相关文章
- codevs1028花店橱窗布置(费用流)
这几天刚学了费用流,找到了这道题来练一练手. 题目: 题目描述 Description 假设以最美观的方式布置花店的橱窗,有F束花,V个花瓶,我们用美学值(一个整数)表示每束花放入每个花瓶所产生的美学 ...
- [IOI1999]花店橱窗布置(DP路径记录)
题目:[IOI1999]花店橱窗布置 问题编号:496 题目描述 某花店现有F束花,每一束花的品种都不一样,同时至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定的,从左到右按1到V顺序编号,V ...
- 洛谷P1854 花店橱窗布置 分析+题解代码
洛谷P1854 花店橱窗布置 分析+题解代码 蒟蒻的第一道提高+/省选-,纪念一下. 题目描述: 某花店现有F束花,每一束花的品种都不一样,同时至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定 ...
- RQNOJ PID496/[IOI1999]花店橱窗布置
PID496 / [IOI1999]花店橱窗布置 ☆ 题目描述 某花店现有F束花,每一束花的品种都不一样,同时至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定的,从左到右按1到V顺序 编号 ...
- 【2018寒假集训 Day2】【2019.5.11更新】【动态规划】花店橱窗布置(FLOWER)
花店橱窗布置(FLOWER) 提交文件名:flower 问题描述: 某花店现有F束花,每一束花的品种都不一样,同时至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定的,从左到右按1到V顺序编号, ...
- codevs 1028 花店橱窗布置
时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 假设以最美观的方式布置花店的橱窗,有F束花,V个花瓶,我们用美学值(一个整 ...
- AC日记——花店橱窗布置 codevs 1028
题目描述 Description 假设以最美观的方式布置花店的橱窗,有F束花,V个花瓶,我们用美学值(一个整数)表示每束花放入每个花瓶所产生的美学效果.为了取得最佳的美学效果,必须使花的摆放取得最大的 ...
- wikioi 1028 花店橱窗布置 最大权匹配
中文题意不描述. 链接:http://wikioi.com/problem/1028/ 这题一开始很裸的最大权二分匹配.但是原来没有接触过,KM的这个最大权不大会.然后一开始以为用最大费用最大流直接就 ...
- [动态规划]P1854 花店橱窗布置
题目描述 某花店现有F束花,每一束花的品种都不一样,同时至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定的,从左到右按1到V顺序编号,V是花瓶的数目.花束可以移动,并且每束花用1到F的整数标识 ...
随机推荐
- Andriod - 创建自定义控件
控件和布局的继承结构: 可以看到,我们所用的所有控件都是直接或间接继承自 View的,所用的所有布局都是直接或间接继承自 ViewGroup 的.View 是 Android 中一种最基本的 UI 组 ...
- hdu1174(3维射线与圆是否相交)
简单的题意,要注意z2 = h2*0.9-r2 #include <iostream> #include <cmath> #include <vector> #in ...
- Olya and Energy Drinks(bfs)
D. Olya and Energy Drinks time limit per test 2 seconds memory limit per test 256 megabytes input st ...
- fatal error C1083: 无法打开包括文件:“stdint.h”: No such file or directory
stdint.h是c99标准的头文件,vc不支持,所以肯定会提示“No such file or directory”的. stdint.h是C99的标准,主要用于统一跨平台数据定义. MSVC中不带 ...
- spring web中完成单元测试
对于在springweb总完单元测试,之前找过些资料,摸索了很久,记录下最终自己使用的方法 1,创建测试类,创建测试资源文件夹 src/test/resources/WEB_INFO/conf 将工程 ...
- Android系统移植与调试之------->如何修改Android的默认语言、默认时区
修改device/other/TBDG1073/ system.prop文件 1.设置默认语言 找到device/other/TBDG1073/ system.prop文件,修改属性ro.produc ...
- vloatile总结与synchronized对比
原文地址:https://www.cnblogs.com/xiaoxian1369/p/5411877.html 1.要使volatile变量提供理想的线程安全,必须同时满足以下两个条件:1).对变量 ...
- LeetCode-day04
35. Same Tree 判断两棵树相同 36. Invert Binary Tree 翻转树 37. Symmetric Tree 判断树是不是镜像对称的 38. Maximum Depth of ...
- python基础28 -----python中sockserver模块
一.Python中的sockserver模块 1.该模块与sock模块不同之处是该模块自动帮我们分装好了一些功能,让我们在编程的时候直接调用这些功能就可以了,节省了编程步骤. 2.如图所示 注释:上图 ...
- start() vs. run()
I'm reading a Blog. But a rather familiar question occurred to me, "What's the difference ...