[BZOJ 1070] [SCOI2007] 修车
1070: [SCOI2007]修车
Time Limit: 1 SecMemory Limit: 162 MB
Description
同一时刻有N位车主带着他们的爱车来到了汽车维修中心。维修中心共有M位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的。现在需要安排这M位技术人员所维修的车及顺序,使得顾客平均等待的时间最小。 说明:顾客的等待时间是指从他把车送至维修中心到维修完毕所用的时间。
Input
第一行有两个m,n,表示技术人员数与顾客数。 接下来n行,每行m个整数。第i+1行第j个数表示第j位技术人员维修第i辆车需要用的时间T。
Output
最小平均等待时间,答案精确到小数点后2位。
Sample Input
3 2
1 4
Sample Output
HINT
数据范围: (2<=M<=9,1<=N<=60), (1<=T<=1000)
【题解】
设time[i][j]表示第i部车被第j个修理人员修的时间.
把每个维修人员拆成n个点,表示是倒数第几个修的.再建n个点表示n部车.
那么如果第i部车,是在第j个维修人员那里作为倒数第z个修,那么就像i->(j,z)连一条费用(影响)是 time[i][j]*z (要加上自己的哦.),容量为1的边.
再向源点到n部车的点连一条容量为1费用为0的边,表示每部车只有一辆.
每个表示第j个维修人员,倒数第z个修的点(j,z)向汇点连一条容量为1费用为0的边,表示第j个维修人员,倒数第z个修的车,只能有一辆.
这构图真是机智。。。然而我太弱了只好多见识见识机智的构图模型咯
现在费用流写的有点熟了呢~
1 #include <stdio.h> 2 #include <queue> 3 #include <string.h> 4 using namespace std; 5 const int B=200100; 6 int head[B], timx[1010][1010], S, T, n, m, cnt=-1, next[B], to[B], w[B], flow[B], d[B], pre[B]; 7 bool vis[B]; 8 int oq[B]; 9 int ans; 10 double ans2; 11 queue<int> q; 12 13 inline void qclean() { 14 while(!q.empty()) q.pop(); 15 } 16 inline void addf(int u,int v,int _flow,int _w) { 17 ++cnt; 18 to[cnt]=v; 19 next[cnt]=head[u]; 20 head[u]=cnt; 21 flow[cnt]=_flow; 22 w[cnt]=_w; 23 } 24 inline void add(int u,int v,int _flow,int _w) { 25 addf(u,v,_flow,_w); 26 addf(v,u,0,-_w); 27 } 28 inline bool spfa() { 29 qclean(); 30 memset(d,0X7f,sizeof(d)); 31 memset(vis,0,sizeof(vis)); 32 memset(oq,0,sizeof(oq)); 33 memset(pre,-1,sizeof(pre)); 34 pre[S]=-1; d[S]=0; vis[S]=1; q.push(S); 35 while(!q.empty()) { 36 int top=q.front(); q.pop(); 37 vis[top]=0; 38 for (int i=head[top];i>=0;i=next[i]) { 39 if(d[top]+w[i]<d[to[i]]&&flow[i]) { 40 d[to[i]]=d[top]+w[i]; 41 pre[to[i]]=i; 42 if(!vis[to[i]]) { 43 vis[to[i]]=1; 44 q.push(to[i]); 45 } 46 } 47 } 48 } 49 return pre[T]!=-1; 50 } 51 inline void mcf() { 52 int xm=1e9; 53 for (int k=pre[T];k>=0;k=pre[to[k^1]]) 54 xm=min(xm,flow[k]); 55 for (int k=pre[T];k>=0;k=pre[to[k^1]]) { 56 flow[k]-=xm; 57 flow[k^1]+=xm; 58 ans+=xm*w[k]; 59 } 60 } 61 int main() { 62 scanf("%d%d",&m,&n); 63 S=0; T=n*m+n+1; 64 memset(head,-1,sizeof(head)); 65 for (int i=1;i<=n;++i) 66 for (int j=1;j<=m;++j) scanf("%d",&timx[i][j]); 67 for(int i=1;i<=n;i++) add(S,i,1,0); 68 for(int i=n+n*m;i>=n+1;i--) add(i,T,1,0); 69 for(int i=1;i<=n;i++) 70 for(int j=1;j<=m;j++) 71 for(int k=1;k<=n;k++) 72 add(i,j*n+k,1,(n-k+1)*timx[i][j]); 73 while(spfa()) mcf(); 74 printf("%.2lf\n",(double)ans/n); 75 return 0; 76 }
View Code
转载于:https://www.cnblogs.com/TonyNeal/p/bzoj1070.html
[BZOJ 1070] [SCOI2007] 修车相关推荐
- BZOJ 1070: [SCOI2007]修车(最小费用最大流)
建图很神奇..建完图其实就是裸的费用流了.. -------------------------------------------------------------- #include<cs ...
- BZOJ 1070: [SCOI2007]修车
1070: [SCOI2007]修车 Description 同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的.现在需要 ...
- [BZOJ 1070][SCOI2007]修车(费用流)
Description 同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的.现在需要安排这M位技术人员所维修的车及顺序,使 ...
- BZOJ 1070: [SCOI2007]修车(费用流)
http://www.lydsy.com/JudgeOnline/problem.php?id=1070 题意: 思路: 神奇的构图. 因为排在后面的人需要等待前面的车修好,这里将每个技术人员拆成n个 ...
- bzoj 1070: [SCOI2007]修车【最小费用最大流】
一开始从客人角度想的,怎么建都不对 从一个修车工所接待的所有顾客花费的总时间来看,设一共有x个人,那么第一个修的对总时间的贡献是x*w1,第二个是(x-1)*w2-以此类推.所以把第i个修车工拆成n组 ...
- 【BZOJ】1070: [SCOI2007]修车
1070: [SCOI2007]修车 Description 同 一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的.现在需 ...
- 1070: [SCOI2007]修车
/*一开始以为是个贪心 发现自己太naive了将每个技术工人拆成n个点,一共拆n*m个,第i个表示倒数第i次修车. 让每辆车向拆出来的点连边,费用为tmp[i][j]*k,i是技工,j是车,k是拆出来 ...
- BZOJ 1070 拆点 费用流
1070: [SCOI2007]修车 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 5860 Solved: 2487 [Submit][Statu ...
- bzoj 1070【scoi2007】修车(网络流)
时间限制:1秒 内存限制:64M [问题描述] 同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的.现在需要安排这M位技术 ...
- luogu P2053 [SCOI2007]修车(费用流提前计算)
P2053 [SCOI2007]修车 要求平均时间最短,就等同于要求总时间最短. 一个人维修所花的时间,对同一位技术人员之后维修造成的影响是已知且固定的.那么,我们将费用提前计算.即将第 i 位车主的 ...
最新文章
- [Unity3D]总结使用Unity 3D优化游戏运行性能的经验
- 深度信念网络Deep Belief Networks资料汇总
- 通用类别目录Global Catalog[为企业维护windows server 2008系列五]
- OSS网页上传和断点续传(终结篇)
- 分布式锁的多种实现方式
- 2018/11/29 一个64位操作系统的设计与实现 03 (在Bochs上运行Boot程序)
- 安装openstack时遇到的错误
- 使用 idea 创建第一个 springboot 项目
- java URL连接ftp_java – URLConnection FTP列表文件
- STM32F103:一.(3)IO方向
- 前端后台与接口的问题
- YII 利用Clip构建layout
- js实现调用摄像头拍照功能
- 群晖Nas通过jellyfin搭建本地影音库详细全过程(一):通过群晖系统docker容器安装jellyfin影音库服务器
- 计算机网上邻居怎么隐藏,Win7桌面不显示网上邻居图标方法 win7系统如何隐藏网上邻居图标...
- 利用东方财富网获取股票代码
- 华为员工工作生活及待遇全面揭秘
- 工程制图计算机绘图实训总结感悟,工程制图心得体会.doc
- 说一说程序员如何保持平常心
- ih5长图如何滑动_iH5中级教程微场景H5必备,滑动时间轴+轨迹.doc