题解 [SCOI2007]修车
题面
解析
这题要拆点。。
首先,证明一个式子:
设修理员M修了N辆车,
且修每辆车的时间为W1,W2....WN。
那么,这个修理员一共花的时间就为:W1*N+W2*(N-1)+...+WN*1。
因此,若i号修理员修第j辆车的时间为c[i][j],
将c[i][j]拆成1...n个点,
将其中第k个点与j号顾客(j号车)相连,
费用为c[i][j]*k,
最后将修理员与源点相连,顾客与汇点相连(反过来也可以),
流量为1,费用为0。
跑费用流就行了。
上AC代码:
//#include<bits/stdc++.h>
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std; inline int read(){
int sum=,f=;char ch=getchar();
while(ch>'' || ch<''){if(ch=='-')f=-;ch=getchar();}
while(ch>='' && ch<=''){sum=sum*+ch-'';ch=getchar();}
return f*sum;
} const int INF=0x3f3f3f3f;
struct node{
int to,next,v,w;
}e[];
struct hh{
int fa,edge;
}pre[];
int n,m,s,t;
int c[][]/*第i辆车给第j个人修的时间*/;
int head[],cnt=;
int d[],inq[],mi[]; void add(int x,int y,int v,int w){
//printf("%d -> %d : %d\n",x,y,w);
e[++cnt].to=head[x];
e[cnt].next=y;
e[cnt].v=v;e[cnt].w=w;
head[x]=cnt;
e[++cnt].to=head[y];
e[cnt].next=x;
e[cnt].v=;e[cnt].w=-w;
head[y]=cnt;
} bool spfa(){
memset(d,0x3f,sizeof(d));
memset(inq,,sizeof(inq));
memset(mi,0x3f,sizeof(mi));
queue <int> que;
que.push(s);
d[s]=;
while(!que.empty()){
int x=que.front();
que.pop();
inq[x]=;
for(int i=head[x];i;i=e[i].to){
int k=e[i].next;
if(!e[i].v||d[k]<=d[x]+e[i].w) continue;
d[k]=d[x]+e[i].w;
pre[k].fa=x;pre[k].edge=i;
mi[k]=min(mi[x],e[i].v);
if(!inq[k]) que.push(k);
inq[k]=;
}
}
return d[t]!=INF;
} void EK(){
int ans=;
while(spfa()){
for(int i=t;i!=s;i=pre[i].fa){
e[pre[i].edge].v-=mi[t];
e[pre[i].edge^].v+=mi[t];
}
ans+=d[t]*mi[t];
}
printf("%.2lf\n",(double)((double)ans/(double)n));
} int main(){
// freopen("fixed.in","r",stdin);
// freopen("fixed.out","w",stdout);
m=read();n=read();
s=+(m+)*n;t=+(m+)*n;
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
c[i][j]=read();
}
}
for(int i=;i<=m;i++){
for(int j=;j<=n;j++){
add(s,i+m*j,,);
for(int k=;k<=n;k++){
add(i+m*j,k+m*n+n,,c[k][i]*j);
}
}
}
for(int i=;i<=n;i++){
add(i+m*n+n,t,,);
}
EK();
return ;
}
题解 [SCOI2007]修车的更多相关文章
- 【BZOJ1070】[SCOI2007]修车
[BZOJ1070][SCOI2007]修车 题面 以后要多写题面flag 题目描述 同一时刻有\(N\)位车主带着他们的爱车来到了汽车维修中心.维修中心共有\(M\)位技术人员,不同的技术人员对不同 ...
- 【BZOJ1070】[SCOI2007]修车 费用流
[BZOJ1070][SCOI2007]修车 Description 同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的. ...
- bzoj1070: [SCOI2007]修车(费用流)
1070: [SCOI2007]修车 题目:传送门 题解: 一道挺简单的费用流吧...胡乱建模走起 贴个代码... #include<cstdio> #include<cstring ...
- BZOJ 1070: [SCOI2007]修车 [最小费用最大流]
1070: [SCOI2007]修车 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 4936 Solved: 2032[Submit][Status] ...
- 【BZOJ】1070: [SCOI2007]修车
1070: [SCOI2007]修车 Description 同 一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的.现在需 ...
- bzoj 1070: [SCOI2007]修车 费用流
1070: [SCOI2007]修车 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 2785 Solved: 1110[Submit][Status] ...
- bzoj 1070 [SCOI2007]修车(最小费用最大流)
1070: [SCOI2007]修车 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 3515 Solved: 1411[Submit][Status] ...
- BZOJ_1070_[SCOI2007]修车_费用流
BZOJ_1070_[SCOI2007]修车_费用流 Description 同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同 的车进行维修所用的时间 ...
- P2053 [SCOI2007]修车(费用流)
P2053 [SCOI2007]修车 顾客平均等待的最小时间$=$等待总时间$/n$ 考虑只有1个技术人员时,$n$辆车等待总时间 $A_1+(A_1+A_2)+(A_1+A_2+A_3)+...+\ ...
随机推荐
- 小记--------spark的worker原理分析及源码分析
- 【LOJ】#2985. 「WC2019」I 君的商店
LOJ#2985. 「WC2019」I 君的商店 一道很神仙的题啊QAQ 居然是智商题--不是乱搞或者是大数据 我们可以用2N问出一个最大值是1 然后对于任意两个值\(x + y\)和\(a\)比较 ...
- Spring4学习回顾之路03—XML配置Bean ,依赖注入的方式
配置Bean的形式可以基于XML文件的方式,也可以基于注解的方式,而Bean的配置方式可以通过全类名(反射),通过工厂方式和FactoryBean. XML形式 <?xml version=&q ...
- 剑指offer6:旋转数组的最小数字
1. 题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素.例如数组{3,4,5,1,2}为{1,2,3,4,5}的一 ...
- C++入门基础知识(二)
一:引用 概念:是给一个已经存在的变量取一个别名,编译器不会为引用变量开辟内存空间,它和引用的变量公用一块内存空间. 例如: 类型& 引用变量名(对象名)= 引用实体 int& a = ...
- C#中判断文件夹或文件是否存在的方法
一.根据虚拟路径获取文件物理路径: string savePath = Server.MapPath("~/Uploads/RemoteDatum/"); 二.判断文件夹是否存在 ...
- C#:Guid.NewGuid()和DateTime.Now该选择哪个???
直接上代码: namespace ConsoleApp1 { class Program { static void Main(string[] args) { Console.WriteLine(& ...
- 网络基础篇之HDLC、PPP(原理)
一.广域网传输 之前讲解的都是关于局域网的数据传输,这次讲解的是广域网的传输. 广域网简称WAN,是一种跨越超大的.地域性的计算机网络集合.通常跨省.市.甚至一个国家.广域网包括很多子网,子网可以是局 ...
- python学习-数据类型
计算机处理的数据不单纯的指数字,计算机可以处理数字.文本.音频.视频等等各种数据,下面描述的是Python中可以直接使用和处理的基本数据类型. 整数 Python可以处理任意大小的整数,跟ja ...
- STM32 ARM调试问题总结
文章转载自:http://xfjane.spaces.eepw.com.cn/articles/article/item/77908 基于ADS的ARM调试有关问题总结 1. 在添加文件的过程中你可 ...