【题目】

传送门

题目描述:

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

说明:顾客的等待时间是指从他把车送至维修中心到维修完毕所用的时间。

输入格式:

第一行有两个数 m , n m,n m,n,表示技术人员数与顾客数。

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

输出格式:

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

样例数据:

输入
2 2
3 2
1 4

输出
1.50

说明:

2 ≤ m ≤ 9 2\le m\le9 2≤m≤9, 1 ≤ n ≤ 60 1\le n\le60 1≤n≤60, 1 ≤ t ≤ 1000 1\le t\le1000 1≤t≤1000

【分析】

题目中需要求最短的平均等待时间,也就是求最短的总等待时间

对于一个修车工人,若他按顺序修时间为 t 1 , t 2 , ⋯   , t k t_1,t_2,\cdots,t_k t1​,t2​,⋯,tk​ 的车,此时总等待时间为 t 1 ⋅ k + t 2 ⋅ ( k − 1 ) + ⋯ + t k ⋅ 1 t_1\cdot k+t_2\cdot (k-1)+\cdots+t_k\cdot 1 t1​⋅k+t2​⋅(k−1)+⋯+tk​⋅1

那不妨把每个工人拆成 n n n 个点,第 i i i 个点表示这个工人是倒数第 i i i 个修的这辆车

那么就从源点向每辆车连容量为 1 1 1,费用为 0 0 0 的边,从每个阶段的工人向汇点连容量为 1 1 1,费用为 0 0 0 的边;

每辆车向每个阶段的工人连容量为 1 1 1,费用为 t x ⋅ i t_x\cdot i tx​⋅i 的边( t x t_x tx​ 是修当前车的时间, i i i 表示这辆车是这个工人倒数第 i i i 个修的)

建完边之后跑最小费用流就可以了

【代码】

#include<queue>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 1005
#define M 100005
#define inf (1ll<<31ll)-1
using namespace std;
int n,m,s,t,tot=1,mincost;
int a[N],f[N],d[N],first[N];
int v[M],w[M],nxt[M],cost[M];
bool vis[N],walk[N];
int id(int i,int j){return (i-1)*m+j+n;}
void add(int x,int y,int f,int c)
{nxt[++tot]=first[x];first[x]=tot,v[tot]=y,w[tot]=f,cost[tot]=c;
}
bool spfa(int s)
{int x,y,i;memset(d,0x3f,sizeof(d));memcpy(f,first,sizeof(f));memset(vis,false,sizeof(vis));memset(walk,false,sizeof(walk));queue<int>q;q.push(s);d[s]=0;while(!q.empty()){x=q.front();vis[x]=false;q.pop();for(i=f[x];i;i=nxt[i]){y=v[i];if(w[i]&&d[y]>d[x]+cost[i]){d[y]=d[x]+cost[i];if(!vis[y]){q.push(y);vis[y]=true;}}}}return d[t]!=0x3f3f3f3f;
}
int dinic(int now,int flow)
{if(now==t)return mincost+=flow*d[t],flow;int x,ans=0,delta;walk[now]=true;for(int &i=f[now];i;i=nxt[i]){x=v[i];if(d[x]==d[now]+cost[i]&&w[i]&&!walk[x]){delta=dinic(x,min(flow,w[i]));w[i]-=delta,w[i^1]+=delta;flow-=delta,ans+=delta;if(!flow)  return ans;}}return ans;
}
int main()
{int x,i,j,k;scanf("%d%d",&m,&n);s=0,t=n+m*n+1;for(i=1;i<=n;++i){for(j=1;j<=m;++j){scanf("%d",&x);for(k=1;k<=n;++k)add(i,id(k,j),1,x*k),add(id(k,j),i,0,-x*k);}}for(i=1;i<=n;++i)  add(s,i,1,0),add(i,s,0,0);for(i=1;i<=m*n;++i)  add(n+i,t,1,0),add(t,n+i,0,0);while(spfa(s))  dinic(s,inf);printf("%.2lf",1.0*mincost/n);return 0;
}

【SCOI 2007】修车相关推荐

  1. 应用案例 | 2007 款奥迪 A4 车发动机故障灯异常点亮-

    一.故障现象 一辆2007款奥迪A4车,搭载BKB发动机,累计行驶里程约为23万km.车主反映,该车曾因机油消耗量过大,在其他修理厂大修过发动机,而大修后出现发动机故障灯异常点亮的故障,为此进行过多次 ...

  2. 家用汽车维修4:修车工具材料

    修车工具材料 (2014-10-27 21:23:46) 工具补遗:http://blog.wenxuecity.com/myblog/36867/201511/326350.html A gener ...

  3. 将moss 2007的模板文件导入到moss 2010

    最近公司HR请请将一个moss2007的调查模板文件导入到我们部门的Moss protal 上面. 我想这是举手之劳,就爽快的答应了. 但是导入时却报如下错误: Error Microsoft Sha ...

  4. 2007过年休息的日子

    今天值班,2007年上班期间难得的轻闲机会了.借此,为老朋友们更新一下我的近况. 年前四五天就请了年休假,准备享受不用上班的日子.以为能过得轻松惬意,想不到没完没了的家务怎么也做不完,似乎每天都是做饭 ...

  5. Exchange 2007迁移2010时的公用文件夹多个公用树错误

    近期在项目中,客户Exchange 从2007迁移到2010,Microsoft Exchange从2007开始就逐渐弱化了公用文件夹,outlook 2007和2010都不需要使用到公用文件夹了.但 ...

  6. 安装和部署Exchange Server 2007

    为什么Exchange Server 2007使用服务器角色? 简化部署和管理 增强可扩展性 改进安全性   见下图: 什么是邮箱服务器角色? 邮箱服务器角色: 存储用户邮箱和公共文件夹 通过群集, ...

  7. 2007年11月网络工程师考试试题

    ● 若某计算机系统由两个部件串联构成,其中一个部件的失效率为7×10-6/小时.若不考虑其他因素的影响,并要求计算机系统的平均故障间隔时间为105小时,则另一个部件的失效率应为 (1) /小时. (1 ...

  8. SharePoint Server 2007 页面模型

    虽然SharePoint Server 2007使用了ASP.NET 2.0的基础页面模型,SharePoint页面基本上也是基于标准的aspx技术来构建,但SharePoint Server 200 ...

  9. 2007年你必须学习的10项.NET技术

    1.WCF (Windows Communication Foundation):虽然WCF显然没有WPF或SilverLight那么吸引人,但是它却是在.NET框架下解决业务问题的基础.所以你今年至 ...

最新文章

  1. 将PS/2接口鼠标改造成USB接口鼠标
  2. python中的del,remove,pop有什么区别
  3. 5、VTK在图像处理中的应用
  4. Delphi中methodaddress的代码解析
  5. 构建二叉堆时间复杂度的证明
  6. 实验1 词法分析程序设计
  7. Android—关于通知NotificationManager操作
  8. exe编辑器_【小功能】Unreal Editor中调用exe
  9. 【CSS】当图片加载缓慢时,图片如何自适应高度
  10. Git 相关使用命令
  11. Forms Authentication With Absolute Return URLs
  12. html设置导背景宽度,calc()实现满屏背景定宽内容
  13. OTT系统和IPTV方案哪个更适合用于搭建局域网视频点播直播
  14. 药品信息管理系统mysql_药品信息管理系统数据库部分代码
  15. 鸿蒙第三代手机,华为第三代折叠屏手机面市 余承东披露今年4月旗舰机启用鸿蒙系统...
  16. yuv420p 详解_YUV格式详解,图文详解YUV420数据格式
  17. 生日在java中怎么写_怎样用java做个生日提醒?如果同一天有多个人过生日怎么做?...
  18. 【MATLAB】rem和mod函数的区别
  19. 微信小程序-退款业务
  20. 在Visual Basic6.0中,如何实现简单加减乘除的程序编写?

热门文章

  1. mPEG-AAN-NHS 甲氧基聚乙二醇-AAN-N-羟基琥珀酰亚胺 mPEG5K-AAN-NHS
  2. iOS WKWebView基本使用总结
  3. java 项目英语面试问题_Java 英文面试题
  4. 道琼斯、标普500、纳斯达克100指数:一季度财报强劲,三大股指技术面却现回调信号!
  5. jenkins UNSTABLE
  6. C语言数据类型(超详细)
  7. 跟曹操学做事,向孔子学做人!
  8. 嵌入式 Linux 开发基本概念
  9. Unity Shader 卡通渲染 (一):仿塞尔达荒野之息 Shader(简易版)
  10. win8.1中文版升级到win8.1专业版