[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位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的. ...
随机推荐
- R12供应商地点层付款方法SQL
--R12供应商地点层付款方法SQL:SELECT ipmv.payment_method_name , ipmv.payment_method_code , 'N' primary_ ...
- Kanzi编程基础3 - 图片读取与显示
Kanzi开发的时候会遇到需要从外部读取图片的情况.Kanzi2.8版本和3.3版本读取方法稍有不同,我们先看看2.8版本的api. [2.8版本] 1)首先要从文件中读取一张图片 struct Kz ...
- &和&&
int j = 5,k = 3; if(!(j==k) && (j == 1 + k++ )) { } System.out.println(j); System.out.printl ...
- gulp入门演练
一直想学习下gulp看了蛮多资料,然后总是感觉是是而非,突然开窍了,把自己学会的过程给大家分享下,入门超级简单的 gulp安装 安装gulp 如果参数-g 表示全局安装 $ npm install g ...
- JSON生成c#类代码小工具
JSON生成c#类代码小工具 为什么写这么个玩意 最近的项目中需要和一个服务端程序通讯,而通讯的协议是基于流行的json,由于是.net,所以很简单的从公司代码库里找到了Newtonsoft.dll( ...
- linux下可执行程序的装载和启动
张雨梅 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-10000 1.c文件的编译 图中显示了c ...
- jQuery.first() 函数
first() 函数详解 函数 获取当前对象的第一个元素 语法 $selector.first() 返回值 返回值为一个对象 实例说明 代码 <!DOCTYPE html><html ...
- 关于HTML5你必须知道的28个新特性,新技巧以及新技术
1. 新的Doctype 尽管使用<!DOCTYPE html>,即使浏览器不懂这句话也会按照标准模式去渲染 2. Figure元素 用<figure>和<figcapt ...
- python多线程
python多线程有两种用法,一种是在函数中使用,一种是放在类中使用 1.在函数中使用 定义空的线程列表 threads=[] 创建线程 t=threading.Thread(target=函数名,a ...
- git hub
如果希望保留生产服务器上所做的改动,仅仅并入新配置项, 处理方法如下:git stashgit pullgit stash pop然后可以使用git diff -w +文件名 来确认代码自动合并的情况 ...