洛谷 P2053 [SCOI2007]修车 解题报告
P2053 [SCOI2007]修车
题目描述
同一时刻有N位车主带着他们的爱车来到了汽车维修中心。维修中心共有M位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的。现在需要安排这M位技术人员所维修的车及顺序,使得顾客平均等待的时间最小。
说明:顾客的等待时间是指从他把车送至维修中心到维修完毕所用的时间。
输入输出格式
输入格式:
第一行有两个数M,N,表示技术人员数与顾客数。
接下来n行,每行m个整数。第i+1行第j个数表示第j位技术人员维修第i辆车需要用的时间T。
输出格式:
最小平均等待时间,答案精确到小数点后2位。
说明
\(2<=M<=9,1<=N<=60,1<=T<=1000\)
感觉费用流建模好难啊,也许是接触的少了?
我们发现每个车要把前面修车的都等一遍,也就是说如果某个技术人员连续修理\(c_1,c_2,..,c_n\)这些车,等待的总时间其实是\(w_1*n+w_2*(n-1)+...+w_n*1\)
我们可以把这些项分开处理。把每个修车的拆成车那么多个点,表示这个修车的在第几位给这个车子修车。
可以把车和新的修车的点看成两个集合,即是二分图带权匹配。
连边
1.S连每个车,容1费0
2.每个车连修车的点集,容1费层数*原始修车费用
3.修车的点连T,容1费0
还有一点,这样为什么保证了对于某个修车的\(j\)跑了第\(i\)层的点时前\(i-1\)层的点都跑过了呢?因为边权是正的跑最小费用最大流的时候贪心就一定先把费用比较小的跑掉了
Code:
#include <cstdio>
#include <queue>
#include <cstring>
const int N=802;
const int M=80010;
const int inf=0x3f3f3f3f;
int head[N],to[M],Next[M],edge[M],cost[M],cnt=1;
void add(int u,int v,int w,int c)
{
to[++cnt]=v;edge[cnt]=w;cost[cnt]=c;Next[cnt]=head[u];head[u]=cnt;
to[++cnt]=u;edge[cnt]=0;cost[cnt]=-c;Next[cnt]=head[v];head[v]=cnt;
}
int t,n,m;
void init()
{
scanf("%d%d",&m,&n);//技术人员,车子数量
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
scanf("%d",&t);
for(int k=1;k<=n;k++)
add(i,n+(k-1)*m+j,1,t*k);
}
add(0,i,1,0);
}
t=n+n*m+1;
for(int j=1;j<=m;j++)
for(int k=1;k<=n;k++)
add(n+(k-1)*m+j,t,1,0);
}
int dep[N],dis[N],used[N],pre[N],ans;
bool spfa()
{
memset(dis,0x3f,sizeof(dis));
dis[0]=0;
std::queue <int > q;
q.push(0);
while(!q.empty())
{
int u=q.front();
q.pop();
used[u]=0;
for(int i=head[u];i;i=Next[i])
{
int v=to[i];
if(!dep[v]&&edge[i]&&dis[v]>dis[u]+cost[i])
{
dis[v]=dis[u]+cost[i];
pre[v]=i;
if(!used[v]) {used[v]=1;q.push(v);}
}
}
}
return dis[t]!=inf;
}
void costflow()
{
while(spfa())
{
int mi=inf;
ans+=dis[t];
for(int now=t;now;now=to[pre[now]^1])
mi=mi>edge[pre[now]]?edge[pre[now]]:mi;
for(int now=t;now;now=to[pre[now]^1])
edge[pre[now]]-=mi,edge[pre[now]^1]+=mi;
}
}
int main()
{
init();
costflow();
printf("%.2lf",double(ans)/double(n));
return 0;
}
2018.7.14
洛谷 P2053 [SCOI2007]修车 解题报告的更多相关文章
- 洛谷$P2053\ [SCOI2007]$修车 网络流
正解:网络流 解题报告: 传送门$QwQ$ 一个很妙的建图,,,说实话我麻油想到$QwQ$ 考虑对每个工人建$n$个点,表示这是他修的倒数第$i$辆车,就可以算出影响是$t\cdot i$,然后对每辆 ...
- [bzoj1070] [洛谷P2053] [SCOI2007] 修车
Description 同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同 的车进行维修所用的时间是不同的.现在需要安排这M位技术人员所维修的车及顺序, ...
- 洛谷 P2053 [SCOI2007]修车(最小费用最大流)
题解 最小费用最大流 n和m是反着的 首先, \[ ans = \sum{cost[i][j]}*k \] 其中,\(k\)为它在当前技术人员那里,排倒数第\(k\)个修 我们可以对于每个技术人员进行 ...
- 洛谷 P2053 [SCOI2007]修车
题目描述 同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的.现在需要安排这M位技术人员所维修的车及顺序,使得顾客平均等待 ...
- 洛谷 P1783 海滩防御 解题报告
P1783 海滩防御 题目描述 WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和仓库总是被敌方派人偷袭 ...
- 洛谷 P4597 序列sequence 解题报告
P4597 序列sequence 题目背景 原题\(\tt{cf13c}\)数据加强版 题目描述 给定一个序列,每次操作可以把某个数\(+1\)或\(-1\).要求把序列变成非降数列.而且要求修改后的 ...
- 洛谷1087 FBI树 解题报告
洛谷1087 FBI树 本题地址:http://www.luogu.org/problem/show?pid=1087 题目描述 我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全 ...
- 洛谷 P3349 [ZJOI2016]小星星 解题报告
P3349 [ZJOI2016]小星星 题目描述 小\(Y\)是一个心灵手巧的女孩子,她喜欢手工制作一些小饰品.她有\(n\)颗小星星,用\(m\)条彩色的细线串了起来,每条细线连着两颗小星星. 有一 ...
- 洛谷 P3177 树上染色 解题报告
P3177 [HAOI2015]树上染色 题目描述 有一棵点数为\(N\)的树,树边有边权.给你一个在\(0\) ~ \(N\)之内的正整数\(K\),你要在这棵树中选择\(K\)个点,将其染成黑色, ...
随机推荐
- JVM知识(下)
目录 方法区 类型信息 方法信息 类变量 引用类的类加载 类引用 堆(Heap) GC 定义对象 数组引用 栈 栈帧 操作数栈 帧数据 本次主要介绍,JVM的方法区,堆,栈.以下内容主要还是参考< ...
- 网络流小结(HNOI2019之前)
\(\text{一:Dinic最大流}\) 最坏复杂度 \({\mathcal O(n^2m)}\) 一般可以处理 \(10^4\) ~ \(10^5\) 的网络. struct Edge { int ...
- 如何在Ubuntu 18.04上安装Go
如何在Ubuntu 18.04上安装Go 谢鸢发表于云计算教程系列订阅98 介绍 课程准备 第1步 - 安装Go 第2步 - 设置Go路径 第3步 - 测试您的安装 结论 介绍 Go是Google开发 ...
- DruidDataSource源码分析
最近公司要求基于阿里的DruidDataSource来做一个连接池监控 , 正好之前没有看过DruidDataSource的源码 , 便自己看了四个多小时写了一些自己的理解 , 给大家分享一下 , 如 ...
- Farm Irrigation ZOJ 2412(DFS连通图)
Benny has a spacious farm land to irrigate. The farm land is a rectangle, and is divided into a lot ...
- vue+vue-video-player实现弹窗播放视频
将视频播放器标签放在对话框标签中,实现弹窗 template 中 <el-dialog :visible.sync="dialogVisible" width='680px' ...
- 2018软工实践—Alpha冲刺(9)
队名 火箭少男100 组长博客 林燊大哥 作业博客 Alpha 冲鸭鸭鸭鸭鸭鸭鸭鸭鸭! 成员冲刺阶段情况 林燊(组长) 过去两天完成了哪些任务 协调各成员之间的工作 多次测试软件运行 学习OPENMP ...
- python爬虫调用搜索引擎及图片爬取实战
实战三-向搜索引擎提交搜索请求 关键点:利用搜索引擎提供的接口 百度的接口:wd="要搜索的内容" 360的接口:q="要搜索的内容" 所以我们只要把我们提交给 ...
- P4tutorial实战
Tutorial样例实战 GitHub仓库地址 参考博客 实验一:SIGCOMM_2015/Sourse_Routing 实验环境: OS:Ubuntu16.04 bmv2:behavioral-mo ...
- Alpha冲刺——第十天
Alpha第十天 听说 031502543 周龙荣(队长) 031502615 李家鹏 031502632 伍晨薇 031502637 张柽 031502639 郑秦 1.前言 任务分配是VV.ZQ. ...