【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的整数标识 ...
随机推荐
- Win7系统安装 MySQL 8.0.11
1. 下载 MySQL 8.0.11 版本 下载地址: https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.11-winx64.zip 2. 下载 ...
- delphi 创建服务,安装与卸载服务
运行Delphi7,选择菜单File-->New-->Other--->Service Application.将生成个服务框架.将工程保存为ServiceDemo.dpr和Unit ...
- coursera 《现代操作系统》 -- 第四周 处理器调度
优先级反转 这往往出现在一个高优先级任务等待访问一个被低优先级任务正在使用的临界资源,从而阻塞了高优先级任务:同时,该低优先级任务被一个次高优先级的任务所抢先,从而无法及时地释放该临界资源.这种情况下 ...
- Null Coalescing Operator
w Parse error: syntax error, unexpected '?'
- You can add an index on a column that can have NULL values if you are using the MyISAM, InnoDB, or MEMORY storage engine.
w https://dev.mysql.com/doc/refman/5.7/en/create-index.html MySQL :: MySQL 5.7 Reference Manual :: B ...
- JS判断是手机访问还是PC端访问网站
<script> if ((navigator.userAgent.match(/(iPhone|iPod|Android|ios|iOS|iPad|Backerry|WebOS|S ...
- Python3.6全栈开发实例[007]
7.此函数只接收一个参数且此参数必须是列表数据类型,此函数完成的功能是返回给调用者一个字典,此字典的键值对为此列表的索引及对应的元素.例如传入的列表为:[11,22,33] 返回的字典为 {0:11, ...
- CentOS6.9添加环境变量
方法一:直接运行命令export PATH=$PATH:~/.composer/vendor/bin 使用这种方法,只会对当前会话有效,也就是说每当登出或注销系统以后,PATH 设置就会失效,只是临时 ...
- centos7安装nodejs 和 yarn
如何从EPEL库安装Node.js 另一个有效且简单的方法来安装Node.js就是从官方库.这同样确保您可以访问到EPEL库,你可以通过运行以下命令. sudo yum install epel-re ...
- ModelSim之TCL仿真
在使用ModelSim时,我们一般都是从界面UI进行操作的,这样也比较直观易学.但是在很多的调试时,发现很多操作都是重复的,修改一下代码就要再次进行相关操作,这样很没有效率.其实,ModelSim是可 ...