http://www.lydsy.com/JudgeOnline/problem.php?id=1070

Description

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

Input

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

Output

  最小平均等待时间,答案精确到小数点后2位。

HINT

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

//.............

  1. #include<iostream>
  2. #include<vector>
  3. #include<cstring>
  4. #include<cstdio>
  5. #include<queue>
  6. using namespace std;
  7. ;
  8. <<;
  9. struct Edge{
  10. int from,to,cap,flow,cost;
  11. };
  12. struct MCMF{
  13. int n,m,s,t;
  14. vector<Edge> edges;
  15. vector<int> G[maxn];
  16. int inq[maxn];
  17. int d[maxn];
  18. int p[maxn];
  19. int a[maxn];
  20. void init(int n){
  21. this->n=n;
  22. ;i<=n;i++) G[i].clear();
  23. edges.clear();
  24. }
  25. void addEdge(int from,int to,int cap,int cost){
  26. edges.push_back((Edge){,cost});
  27. edges.push_back((Edge){to,,,-cost});
  28. m=edges.size();
  29. G[);
  30. G[to].push_back(m-);
  31. }
  32. bool BF(int s,int t,int& flow,int& cost){
  33. ;i<=n;i++) d[i]=inf;
  34. memset(inq,,sizeof(inq));
  35. d[s]=;inq[s]=;p[s]=;a[s]=inf;
  36.  
  37. queue<int> Q;
  38. Q.push(s);
  39. while(!Q.empty()){
  40. int u=Q.front();Q.pop();
  41. inq[u]=;
  42. ;i<G[u].size();i++){
  43. Edge& e=edges[G[u][i]];
  44. if(e.cap>e.flow&&d[e.to]>d[u]+e.cost){
  45. d[e.to]=d[u]+e.cost;
  46. p[e.to]=G[u][i];
  47. a[e.to]=min(a[u],e.cap-e.flow);
  48. if(!inq[e.to]){
  49. Q.push(e.to);
  50. inq[e.to]=;
  51. }
  52. }
  53. }
  54. }
  55. if(d[t]==inf) return false;
  56. flow+=a[t];
  57. cost+=d[t]*a[t];
  58. int u=t;
  59. while(u!=s){
  60. edges[p[u]].flow+=a[t];
  61. edges[p[u]^].flow-=a[t];
  62. u=edges[p[u]].from;
  63. }
  64. return true;
  65. }
  66. int MinCost(int s,int t){
  67. ,cost=;
  68. while(BF(s,t,flow,cost));
  69. return cost;
  70. }
  71. };
  72. MCMF solver;
  73. ][];
  74. int main()
  75. {
  76. int n,m;
  77. scanf("%d %d",&m,&n);
  78. solver.init(+n*(m+));
  79. ;i<=n;++i)
  80. ;j<=m;++j)
  81. scanf("%d",&t[i][j]);
  82. ;i<=n;++i)
  83. solver.addEdge(,+i,,);
  84. ;i<=n*m;++i)
  85. solver.addEdge(+n+i,+n+n*m,,);
  86. ;i<=n;i++){
  87. ;j<=m;j++){
  88. int T=t[i][j];
  89. ;k<=n;k++)
  90. solver.addEdge(+i,+n+(j-)*n+k,,T*k);
  91. }
  92. }
  93. printf(,+n*(m+)))/n);
  94. ;
  95. }

BZOJ1070 修车-费用网络流的更多相关文章

  1. [SCOI2007][bzoj1070] 修车 [费用流]

    题面 传送门 思路 我们考虑某个工人修车的从前到后序列如下: ${W_1,W_2,W_3,...,W_n}$ 那么,对于这n辆车的车主而言,他们等候的总时间为: $\sum_{i=1}^{n}W_i\ ...

  2. 【BZOJ1070】[SCOI2007]修车 费用流

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

  3. BZOJ-1070 修车 最小费用最大流+拆点+略坑建图

    1070: [SCOI2007]修车 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 3624 Solved: 1452 [Submit][Status] ...

  4. [费用流][BZOJ1070]修车

    修车 题目描述 同一时刻有位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的.现在需要安排这M位技术人员所维修的车及顺序,使得顾客平均 ...

  5. [BZOJ1070][SCOI2007]修车 费用流

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

  6. LG2053/BZOJ1070 「SCOI2007」修车 费用流

    问题描述 LG2053 BZOJ1070 题解 将\(m\)个修理工拆为\(n \times m\)个,将修理工和车辆看做二分图,连出一个完全二分图. 边流量为\(1\),费用为时间,费用流即可. \ ...

  7. bzoj1070 修车&& bzoj2879美食节 【费用流】

    bzoj1070: 把每个工人拆成汽车那么多个点,假如说 工人(i, j) 和 汽车k 连边,那就代表第i个工人倒数第j个修汽车k,那么这条边对以后的贡献就是k*time[i修k]. #include ...

  8. [bzoj1070][SCOI2007]修车——费用流

    题目大意: 传送门 题解: 本题和(POJ3686)[http://poj.org/problem?id=3686]一题一模一样,而且还是数据缩小以后的弱化版QAQ,<挑战程序设计竞赛>一 ...

  9. [BZOJ1070] [SCOI2007] 修车 (费用流 & 动态加边)

    Description 同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的.现在需要安排这M位技术人员所维修的车及顺序,使 ...

随机推荐

  1. 像装软件一样装系统 Win8下怎么装Win7

    像装软件一样装系统 Win8下怎么装Win7 首先,你需要一个Windows7的ISO镜像文件,非ghost版本 一般选中ISO文件,点反键在弹出菜单中以“装载”或“window资源管理器”方式打开 ...

  2. Ubuntu下面配置问题

    下开启root登陆 sudo passwd root 输入两次新密码 就能在虚拟终端下用 root登陆了,或者 su到root用户了. ctrl + alt +t 弹出终端 ctrl+ alt+ f7 ...

  3. 【mongodb系统学习之十二】mongodb修改数据(一)

    十二.mongodb修改数据:update 1).修改数据库数据:update:语法 db.collectionName.update({},{},boolean,boolean): 2).updat ...

  4. bug_ _java.lang.IllegalArgumentException: View not attached to window manager 2

    今天遇到一个很奇特的问题,当用户设置了PIN码,在锁屏界面正常解锁PIN码后,进入Launcher时显示com.android.phone 已停止运行.一开始猜想会不会是解锁PIN码的时候处理导致了P ...

  5. 回调--一个经典例子让你彻彻底底理解java回调机制

    本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/17483273),请尊重他人的辛勤劳动成果,谢谢 以前不理解什么叫回调 ...

  6. Java中类的加载、连接和初始化

    Java中类的加载.连接和初始化 类的加载.连接和初始化 先介绍一下JVM和类 JVM和类: 当我们调用Java命令运行某个Java程序时,该命令将会启动一个Java虚拟机进程,不管该Java程序有多 ...

  7. window下安装oracle数据库

    Oracle 11g安装 1.解压下载的包,然后进入包内,点击setup.exe开始安装 . 2.出现如下:一般把那个小对勾取消,点击下一步进行, 弹出下图这个后点‘是’ 3.下图后,选择创建和配置数 ...

  8. JAVA 综合布局应用

    //布局综合应用 import java.awt.*; import javax.swing.*; public class Jiemian4 extends JFrame{ JPanel mb1,m ...

  9. Android Studio 系列教程(转载)

    史上最详细的Android Studio系列教程一--下载和安装:http://segmentfault.com/a/1190000002401964史上最详细的Android Studio系列教程二 ...

  10. GridView内容<br />换行

    if (e.Row.RowType == DataControlRowType.DataRow) { e.Row.Cells[].Text = Server.HtmlDecode(e.Row.Cell ...