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)

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

 #include<iostream>
 #include<vector>
 #include<cstring>
 #include<cstdio>
 #include<queue>
 using namespace std;
 ;
 <<;
 struct Edge{
     int from,to,cap,flow,cost;
 };
 struct MCMF{
     int n,m,s,t;
     vector<Edge> edges;
     vector<int> G[maxn];
     int inq[maxn];
     int d[maxn];
     int p[maxn];
     int a[maxn];
     void init(int n){
         this->n=n;
         ;i<=n;i++) G[i].clear();
         edges.clear();
     }
     void addEdge(int from,int to,int cap,int cost){
         edges.push_back((Edge){,cost});
         edges.push_back((Edge){to,,,-cost});
         m=edges.size();
         G[);
         G[to].push_back(m-);
     }
     bool BF(int s,int t,int& flow,int& cost){
         ;i<=n;i++) d[i]=inf;
         memset(inq,,sizeof(inq));
         d[s]=;inq[s]=;p[s]=;a[s]=inf;

         queue<int> Q;
         Q.push(s);
         while(!Q.empty()){
             int u=Q.front();Q.pop();
             inq[u]=;
             ;i<G[u].size();i++){
                 Edge& e=edges[G[u][i]];
                 if(e.cap>e.flow&&d[e.to]>d[u]+e.cost){
                     d[e.to]=d[u]+e.cost;
                     p[e.to]=G[u][i];
                     a[e.to]=min(a[u],e.cap-e.flow);
                     if(!inq[e.to]){
                         Q.push(e.to);
                         inq[e.to]=;
                     }
                 }
             }
         }
         if(d[t]==inf) return false;
         flow+=a[t];
         cost+=d[t]*a[t];
         int u=t;
         while(u!=s){
             edges[p[u]].flow+=a[t];
             edges[p[u]^].flow-=a[t];
             u=edges[p[u]].from;
         }
         return true;
     }
     int MinCost(int s,int t){
         ,cost=;
         while(BF(s,t,flow,cost));
         return cost;
     }
 };
 MCMF solver;
 ][];
 int main()
 {
     int n,m;
     scanf("%d %d",&m,&n);
     solver.init(+n*(m+));
     ;i<=n;++i)
         ;j<=m;++j)
             scanf("%d",&t[i][j]);
     ;i<=n;++i)
         solver.addEdge(,+i,,);
     ;i<=n*m;++i)
         solver.addEdge(+n+i,+n+n*m,,);
     ;i<=n;i++){
         ;j<=m;j++){
             int T=t[i][j];
             ;k<=n;k++)
                 solver.addEdge(+i,+n+(j-)*n+k,,T*k);
         }
     }
     printf(,+n*(m+)))/n);
     ;
 }

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. Nginx实现内参:为什么架构很重要?

    Nginx在web开发者眼中就是高并发高性能的代名词,其基于事件的架构也被众多开发者效仿.我从Nginx的网站找到一篇技术文章将Nginx是怎样实现的,文章是Nginx的产品老大Owen Garret ...

  2. HTML标签使用特写

    页面定时刷新标签 //页面定时刷新 <meta http-equiv="> Input标记各种特殊用法 <%--禁止鼠标选择内容--%> <input id=& ...

  3. 就Double、Decimal来说数据计算异常

    场景: 客户提示发料时提示库存不足,可肉眼比对发料数量与库存数量没有一点问题. 但调度跟踪却发现出现“不可思议”的异常. 简单分析: 1.转Decimal再计算没问题.精度较高,存储方法也不一样,所以 ...

  4. android 开源项目一览

    直接拿来用!最火的Android开源项目(一) http://www.csdn.net/article/2013-05-03/2815127-Android-open-source-projects ...

  5. 81 Search in Rotated Sorted Array II

    Follow up for "Search in Rotated Sorted Array":What if duplicates are allowed? Would this ...

  6. strong标签与b标签的区别

    关于html标签中b和strong两个的区别. 用在网页上,默认情况下它们起的均是加粗字体的作用,二者所不同的是,<b>标签是一个实体标签,它所包围的字符将被设为bold(粗体),而< ...

  7. Oracle-单表合并列

    表基本结构 合并列 select t.student,decode(t.java,'','','java') 科目, t.java from student t union select t.stud ...

  8. 黄聪:C#操作xml SelectNodes,SelectSingleNode通过 xPath 定位class包含Contains的DIV

    一. SelectNodes,SelectSingleNode总是返回NULL 下面以一个简单的xml为例: <?xml version="1.0"?> <mes ...

  9. Codeforces Round #358 (Div. 2)B. Alyona and Mex

    B. Alyona and Mex time limit per test 1 second memory limit per test 256 megabytes input standard in ...

  10. [复变函数]第06堂课 2.1 解析函数的概念与 Cauchy-Riemann 方程 (续)

    2. 解析函数及其简单性质 (1) 定义: a. 若 $w=f(z)$ 在区域 $D$ 内可微, 则称 $f$ 在 $D$ 内解析; b. 若 $w=f(z)$ 在 $z_0$ 处的某邻域内解析, 则 ...