Description

同一时刻有N位车主带着他们的爱车来到了汽车维修中心。维修中心共有M位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的。现在需要安排这M位技术人员所维修的车及顺序,使得顾客平均等待的时间最小。 说明:顾客的等待时间是指从他把车送至维修中心到维修完毕所用的时间。
Input

第一行有两个m,n,表示技术人员数与顾客数。 接下来n行,每行m个整数。第i+1行第j个数表示第j位技术人员维修第i辆车需要用的时间T。
Output

最小平均等待时间,答案精确到小数点后2位。
Sample Input
2 2
3 2
1 4
Sample Output
1.50

HINT

数据范围: (2<=M<=9,1<=N<=60), (1<=T<=1000)

费用流建图,把m个人每个人拆成n个点,表示的是第m个人倒数第i个修这个车,那么费用就是i*时间

没想到zkw费用流模板打错了

在dfs过程里

我是这么写的

  1. function dfs(x,flow:longint):longint;
  2. var
  3. i,d,min:longint;
  4. begin
  5. flag[x]:=time;
  6. if x=t then
  7. begin
  8. inc(ans,flow*dis[t]);
  9. exit(flow);
  10. end;
  11. i:=first[x];
  12. dfs:=;
  13. while i<> do
  14. begin
  15. d:=dis[x]+w[i]-dis[last[i]];
  16. min:=flow;
  17. if min>liu[i] then min:=liu[i];
  18. if (liu[i]>) and (d<f[last[i]]) then f[last[i]]:=d;
  19. if (d=) and (flag[last[i]]<>time) and (min>) then
  20. begin
  21. d:=dfs(last[i],min);
  22. dec(flow,d);
  23. inc(dfs,d);
  24. inc(liu[i xor ],d);
  25. dec(liu[i],d);
  26. end;
  27. if flow= then break;
  28. i:=next[i];
  29. end;
  30. end;

但是应该这么写

  1. function dfs(x,flow:longint):longint;
  2. var
  3. i,d,min:longint;
  4. begin
  5. if x=t then
  6. begin
  7. inc(ans,flow*dis[t]);
  8. exit(flow);
  9. end;
  10. i:=first[x];
  11. flag[x]:=time;
  12. dfs:=;
  13. while i<> do
  14. begin
  15. d:=dis[x]+w[i]-dis[last[i]];
  16. min:=flow;
  17. if min>liu[i] then min:=liu[i];
  18. if (liu[i]>) and (d<f[last[i]]) then f[last[i]]:=d;
  19. if (d=) and (flag[last[i]]<>time) and (min>) then
  20. begin
  21. d:=dfs(last[i],min);
  22. dec(flow,d);
  23. inc(dfs,d);
  24. inc(liu[i xor ],d);
  25. dec(liu[i],d);
  26. end;
  27. if flow= then break;
  28. i:=next[i];
  29. end;
  30. end;

应该先判断是否走到了汇点,再做标记,如果不这样的话,就无法多路增广了,即只能到达汇点一次,然后他会立即增加dis,这个时候dis就是错的了(因为较小的那个dis还没有增广完全)

对于其他的点,都是增广到不能再增广,所以没有问题,只要访问一次就行了(应该是这样的吧)

写了几遍了,连这个都没有发现,唉~~~~

  1. const
  2. maxn=;
  3. maxm=;
  4. inf=;
  5. var
  6. n,m,tot,s,t,ans,time:longint;
  7. first,f,dis,flag:array[..maxn*maxm]of longint;
  8. last,next,w,liu:array[..maxn*maxn*maxm*maxm]of longint;
  9.  
  10. procedure insert(x,y,f,ww:longint);
  11. begin
  12. inc(tot);
  13. last[tot]:=y;
  14. next[tot]:=first[x];
  15. first[x]:=tot;
  16. w[tot]:=ww;
  17. liu[tot]:=f;
  18. end;
  19.  
  20. procedure init;
  21. var
  22. i,j,k,x:longint;
  23. begin
  24. read(m,n);
  25. tot:=;
  26. s:=;
  27. t:=n*m+n+;
  28. for i:= to n do
  29. for j:= to m do
  30. begin
  31. read(x);
  32. for k:= to n do
  33. begin
  34. insert((j-)*n+k,n*m+i,,x*k);
  35. insert(n*m+i,(j-)*n+k,,-x*k);
  36. end;
  37. end;
  38. for i:= to n*m do
  39. begin
  40. insert(s,i,,);
  41. insert(i,s,,);
  42. end;
  43. for i:= to n do
  44. begin
  45. insert(n*m+i,t,,);
  46. insert(t,n*m+i,,);
  47. end;
  48. end;
  49.  
  50. function dfs(x,flow:longint):longint;
  51. var
  52. i,d,min:longint;
  53. begin
  54. if x=t then
  55. begin
  56. inc(ans,flow*dis[t]);
  57. exit(flow);
  58. end;
  59. i:=first[x];
  60. flag[x]:=time;
  61. dfs:=;
  62. while i<> do
  63. begin
  64. d:=dis[x]+w[i]-dis[last[i]];
  65. min:=flow;
  66. if min>liu[i] then min:=liu[i];
  67. if (liu[i]>) and (d<f[last[i]]) then f[last[i]]:=d;
  68. if (d=) and (flag[last[i]]<>time) and (min>) then
  69. begin
  70. d:=dfs(last[i],min);
  71. dec(flow,d);
  72. inc(dfs,d);
  73. inc(liu[i xor ],d);
  74. dec(liu[i],d);
  75. end;
  76. if flow= then break;
  77. i:=next[i];
  78. end;
  79. end;
  80.  
  81. procedure work;
  82. var
  83. del,i:longint;
  84. begin
  85. while true do
  86. begin
  87. for i:=s to t do
  88. f[i]:=inf;
  89. inc(time);
  90. dfs(s,inf);
  91. del:=inf;
  92. for i:=s to t do
  93. if (flag[i]<>time) and (f[i]<del) then del:=f[i];
  94. if del=inf then break;
  95. for i:=s to t do
  96. if flag[i]<>time then inc(dis[i],del);
  97. end;
  98. writeln(ans/n::);
  99. end;
  100.  
  101. begin
  102. init;
  103. work;
  104. end.

1070: [SCOI2007]修车 - BZOJ的更多相关文章

  1. BZOJ 1070: [SCOI2007]修车 [最小费用最大流]

    1070: [SCOI2007]修车 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 4936  Solved: 2032[Submit][Status] ...

  2. 【BZOJ】1070: [SCOI2007]修车

    1070: [SCOI2007]修车 Description 同 一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的.现在需 ...

  3. bzoj 1070: [SCOI2007]修车 费用流

    1070: [SCOI2007]修车 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 2785  Solved: 1110[Submit][Status] ...

  4. bzoj 1070 [SCOI2007]修车(最小费用最大流)

    1070: [SCOI2007]修车 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 3515  Solved: 1411[Submit][Status] ...

  5. 1070: [SCOI2007]修车

    1070: [SCOI2007]修车 https://www.lydsy.com/JudgeOnline/problem.php?id=1070 分析: 每个第几次修车等的时间都不一样,当前第i个人修 ...

  6. [BZOJ 1070] [SCOI2007] 修车 【费用流】

    题目链接:BZOJ - 1070 题目分析 首先想到拆点,把每个技术人员拆成 n 个点,从某个技术人员拆出的第 i 个点,向某辆车连边,表示这是这个技术人员修的倒数第 i 辆车.那么这一次修车对整个答 ...

  7. 【BZOJ】1070: [SCOI2007]修车(费用流+特殊的技巧)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1070 好神的题!!!orz 首先我是sb不会拆点..... 首先,每一个技术人员维修车辆都有一个先后 ...

  8. BZOJ 1070: [SCOI2007]修车(费用流)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1070 题意: 思路: 神奇的构图. 因为排在后面的人需要等待前面的车修好,这里将每个技术人员拆成n个 ...

  9. bzoj 1070 [SCOI2007]修车——网络流(拆边)

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1070 后面还有几辆车在这个人这儿修,自己这辆车的时间对总时间的贡献就要多乘上几倍. 所以可以 ...

随机推荐

  1. 十四、Android学习笔记_Android回调函数触发的几种方式 广播 静态对象

    一.通过广播方式: 1.比如登录.假如下面这个方法是外界调用的,那么怎样在LoginActivity里面执行登录操作,成功之后在回调listener接口呢?如果是平常的类,可以通过构造函数将监听类对象 ...

  2. php读取目录下的文件

    工作需要写了一个读取指定目录下的文件,并显示列表,点击之后读取文件中的内容 高手拍砖,目录可以自由指定,我这里直接写的是获取当前文件目录下面的所有文件 <?php /** * 读取指定目录下面的 ...

  3. MVC自定义错误页404静态页

    昨天公司要求给所有项目添加自定义404错误页,具体的要求实现的有以下几点: 1.实现自定义错误(如各种error,404等)跳转到指定的页面 2.所指定的页面输出的http状态值必须是404或其他指定 ...

  4. asp.net中URL参数传值中文乱码的三种解决办法

    在做Asp.Net开发的时候,参数传递中文时,经常会遇到页面乱码的问题,下面是在网上收集的相关资料,请大家参考: 解决的方法一般有3种: 1.设置web.config文件 <system.web ...

  5. [老老实实学WCF] 第八篇 实例化

    老老实实学WCF 第八篇 实例化 通过上一篇的学习,我们简单地了解了会话,我们知道服务端和客户端之间可以建立会话连接,也可以建立非会话连接,通信的绑定和服务协定的 ServiceContract 的S ...

  6. 20150323--MVC

    MVC: Model view(视图层,模板) Control(控制层) 三层:数据访问,商业逻辑,用户界面(Webform,MVC). 服务端无状态:接受请求,返回页面,每次请求并返回界面,前后不是 ...

  7. UI2_IOS坐标系

    // // AppDelegate.m // UI2_IOS坐标系 // // Created by zhangxueming on 15/6/29. // Copyright (c) 2015年 z ...

  8. JS学习第二课

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. [javascript|基本概念|Underfined]学习笔记

    Underfined类型的值:underfined(只有一个) 1/声明未初始化 e.g.:var msg;-->msg == underfined:true 2/申明并值初始化为underfi ...

  10. CSS伪对象选择符整理

    1.E::selection 2.E::placeholder 1. E::selection 设置对象被选择时的样式. 需要注意的是,::selection只能定义被选择时的background-c ...