[SCOI2007] 修车
属于我的费用流版本终于诞生了!想来还有点小激动呢…看了下模板,之后完全按照自己的想象来写,这样在考场上也不怕啦~
某人说其实费用流就是把Dinic里的BFS换成SPFA,似乎还是比较有道理的,就是addflow要做一些修改,我第一次的错误就是addflow里的循环写成了while pre[x]<>st do,正解是while x<>st do。
既然算法的问题解决了,接下来的问题就是构图的问题——如何根据题目构建对应的网络。这一题的网络非常特殊,甚至被有些OIer评论为“非主流”…我理解别人的构图也花了一些时间…主要某一个点的费用是它对之后排着的顾客的影响。例如x点表示j号员工接手的倒数第k个顾客是顾客i,那么cost[x]=(k-1)*time[i,j],k映射成n-k就成为了我程序里的构图。在考前果断还要对各种构图熟悉一下,希望有时间。
program repair;
type ptype=^node;
node=record
v,w,flow,cost:longint;
next,op:ptype;
end;
const maxn=;
var head,prep:array[..maxn] of ptype;
visit:array[..maxn] of boolean;
q,dis,pre:array[..maxn] of longint;
time:array[..,..] of longint;
n,m,i,j,k,st,ed:longint;
function min(a,b:longint):longint;
begin
if a<b then exit(a) else exit(b);
end; procedure insert(u,v,w1,w2,cost:longint);
var p1,p2,q:ptype;
begin
new(p1);
p1^.v:=v;p1^.w:=w1;p1^.flow:=;p1^.cost:=cost;p1^.next:=nil;
q:=head[u];
if q=nil then head[u]:=p1 else
begin
q:=head[u];
head[u]:=p1;
p1^.next:=q;
end;
new(p2);
p2^.v:=u;p2^.w:=w2;p2^.flow:=;p2^.cost:=-cost;p2^.next:=nil;
q:=head[v];
if q=nil then head[v]:=p2 else
begin
q:=head[v];
head[v]:=p2;
p2^.next:=q;
end;
p1^.op:=p2;p2^.op:=p1;
end; function spfa:boolean;
var star,rear,x:longint;
y:ptype;
begin
fillchar(q,sizeof(q),);
fillchar(pre,sizeof(pre),);
fillchar(visit,sizeof(visit),false);
fillchar(dis,sizeof(dis),$7f);
star:=;rear:=;q[star]:=st;visit[st]:=true;dis[st]:=;
while star<=rear do
begin
x:=q[star];
y:=head[x];
while y<>nil do
begin
if (dis[y^.v]>dis[x]+y^.cost) and (y^.w>y^.flow) then
begin
dis[y^.v]:=dis[x]+y^.cost;
pre[y^.v]:=x;
prep[y^.v]:=y;
if not visit[y^.v] then
begin
inc(rear);
q[rear]:=y^.v;
visit[y^.v]:=true;
end;
end;
y:=y^.next;
end;
visit[x]:=false;
inc(star);
end;
spfa:=not (dis[ed]=);
end; function addcost:longint;
var x,addflow:longint;
y:ptype;
begin
x:=ed;
addflow:=maxlongint;
while x<>st do
begin
y:=prep[x];
addflow:=min(addflow,y^.w-y^.flow);
x:=pre[x];
end;
x:=ed;
while x<>st do
begin
y:=prep[x];
inc(y^.flow,addflow);
dec(y^.op^.flow,addflow);
x:=pre[x];
end;
addcost:=addflow*dis[ed];
end; function mincost:longint;
begin
mincost:=;
while spfa do inc(mincost,addcost);
end; begin
//assign(input,'repair.in');reset(input);
//assign(output,'repair.out');rewrite(output);
readln(m,n);
st:=;ed:=n+n*m+;
for i:= to n do
for j:= to m do
read(time[i,j]);
for i:= to n do
insert(st,i,,,);
for i:=n+n*m downto n+ do
insert(i,ed,,,);
for i:= to n do
for j:= to m do
for k:= to n do
insert(i,j*n+k,,,(n-k+)*time[i,j]);
writeln(mincost/n::);
//close(input);close(output);
end.
repair
本题也是BZOJ 1070

啊啊啊还有2天就要坐灰机了,说来时间真的不多了。简单列一下还要复习的东西吧:树状数组/线段树,Splay(Ex.Cashier),KMP,Tarjan相关,并查集,二分匹配相关……好像也没时间搞别的了?~TAT~
[SCOI2007] 修车的更多相关文章
- BZOJ 1070: [SCOI2007]修车 [最小费用最大流]
1070: [SCOI2007]修车 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 4936 Solved: 2032[Submit][Status] ...
- 【BZOJ】1070: [SCOI2007]修车
1070: [SCOI2007]修车 Description 同 一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的.现在需 ...
- bzoj 1070: [SCOI2007]修车 费用流
1070: [SCOI2007]修车 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 2785 Solved: 1110[Submit][Status] ...
- bzoj 1070 [SCOI2007]修车(最小费用最大流)
1070: [SCOI2007]修车 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 3515 Solved: 1411[Submit][Status] ...
- BZOJ_1070_[SCOI2007]修车_费用流
BZOJ_1070_[SCOI2007]修车_费用流 Description 同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同 的车进行维修所用的时间 ...
- P2053 [SCOI2007]修车(费用流)
P2053 [SCOI2007]修车 顾客平均等待的最小时间$=$等待总时间$/n$ 考虑只有1个技术人员时,$n$辆车等待总时间 $A_1+(A_1+A_2)+(A_1+A_2+A_3)+...+\ ...
- [SCOI2007]修车(建图好题)
[SCOI2007]修车 https://www.lydsy.com/JudgeOnline/problem.php?id=1070 Time Limit: 1 Sec Memory Limit: ...
- 【BZOJ1070】[SCOI2007]修车
[BZOJ1070][SCOI2007]修车 题面 以后要多写题面flag 题目描述 同一时刻有\(N\)位车主带着他们的爱车来到了汽车维修中心.维修中心共有\(M\)位技术人员,不同的技术人员对不同 ...
- 洛谷 P2053 [SCOI2007]修车 解题报告
P2053 [SCOI2007]修车 题目描述 同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的.现在需要安排这M位技术 ...
- 【BZOJ1070】[SCOI2007]修车 费用流
[BZOJ1070][SCOI2007]修车 Description 同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的. ...
随机推荐
- sql 游标
--创建游标 DECLARE cursor_name CURSOR [ LOCAL | GLOBAL ] [ FORWARD_ONLY | SCROLL ] [ STATIC | KEYSET | D ...
- test lab ~ triangle test by using junit and coverage
first set up a new folder as your test class place, and then let your package in test class folder b ...
- a 锚点跳转滑动效果
点击a链接时,跳转到相应id的位置处,有一个滑动效果. <a href="#my">我是跳转到div</a><div id="my" ...
- phpstorm 设置Utf8编码
点击file 再点击setting 找到file Encoding gbk改成utf-8就ok了
- TestNG Study Note 1 - Eclipse 插件安装
TestNG 插件在线安装 Help -> Install New Software -> Add -> Paste TestNG url to Add: http://testn ...
- ES6 对象增强和结构赋值
The enhanced Object literals: ES6 has added some new syntax-based extensions to {} object literal fo ...
- Sublime text3 常用插件 安装
1 安装插件前的准备工作 首先确保你的Sublime Text3编辑器为官方版(非破解版),建议下载官网的便携版本(好处多多). 然后安装插件管理工具(Package Control) 1.1 打开S ...
- 基于Eclipse+Cordova的Android Hybrid应用开发环境搭建
环境说明 操作系统:Windows 7 64位 Eclipse版本:4.5.2 Release(eclipse-jee-mars-2) JDK版本:1.8 搭建步骤 1.从http://www.ecl ...
- AJAX第二发
开始总结自己在项目上的使用AJAX的情况: 该图为向后台请求的数据,前台返回的结果,返回的数据类型为object,businessObj由许多key组成,我们项目前台需要调用的数据就藏在数组recor ...
- webpack入门
一,为什么用webpack 1.由于项目中资源的多样性和依赖性 2.js模块规范复杂化 3.开发与线上文件不一致性 二.webpack 特性 1.对CommonJS.AMD.ES6语法兼容 2.对js ...