题面

解析

这题要拆点。。

首先,证明一个式子:

设修理员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]修车的更多相关文章

  1. 【BZOJ1070】[SCOI2007]修车

    [BZOJ1070][SCOI2007]修车 题面 以后要多写题面flag 题目描述 同一时刻有\(N\)位车主带着他们的爱车来到了汽车维修中心.维修中心共有\(M\)位技术人员,不同的技术人员对不同 ...

  2. 【BZOJ1070】[SCOI2007]修车 费用流

    [BZOJ1070][SCOI2007]修车 Description 同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的. ...

  3. bzoj1070: [SCOI2007]修车(费用流)

    1070: [SCOI2007]修车 题目:传送门 题解: 一道挺简单的费用流吧...胡乱建模走起 贴个代码... #include<cstdio> #include<cstring ...

  4. BZOJ 1070: [SCOI2007]修车 [最小费用最大流]

    1070: [SCOI2007]修车 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 4936  Solved: 2032[Submit][Status] ...

  5. 【BZOJ】1070: [SCOI2007]修车

    1070: [SCOI2007]修车 Description 同 一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的.现在需 ...

  6. bzoj 1070: [SCOI2007]修车 费用流

    1070: [SCOI2007]修车 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 2785  Solved: 1110[Submit][Status] ...

  7. bzoj 1070 [SCOI2007]修车(最小费用最大流)

    1070: [SCOI2007]修车 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 3515  Solved: 1411[Submit][Status] ...

  8. BZOJ_1070_[SCOI2007]修车_费用流

    BZOJ_1070_[SCOI2007]修车_费用流 Description 同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同 的车进行维修所用的时间 ...

  9. P2053 [SCOI2007]修车(费用流)

    P2053 [SCOI2007]修车 顾客平均等待的最小时间$=$等待总时间$/n$ 考虑只有1个技术人员时,$n$辆车等待总时间 $A_1+(A_1+A_2)+(A_1+A_2+A_3)+...+\ ...

随机推荐

  1. mysql函数使用报错

    This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its de 错误解决办法 解决办法也有两种,第一种是在创建 ...

  2. python不同编码方式对应所占字节数

    不同编码方式对应所占字节数 ASCII码中,一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间.一个二进制数字序列,在计算机中作为一个数字单元,一般为8位二进制数,换算为十进制. ...

  3. django进阶版2

    目录 批量插入数据 自定义分页器 创建多表关系的3种方法 全自动 全手动 半自动 form组件 如何渲染页面 第一种方式 第二种方式 第三种方式 如何显示错误信息 forms组件钩子函数 局部钩子 全 ...

  4. Socket-实例

    import socket,os,time server = socket.socket() server.bind(("localhost",9999)) server.list ...

  5. Jmeter之参数化(4种设置方法)

    以多用户登录为例~~~ 参数化: 1.用户参数 2.CSV数据文件 3.函数助手CSVRead 4.用户自定义的变量 1.用户参数 脚本目录结构如下: 因为设置了2组账号密码,所以线程数设置为2(添加 ...

  6. Java EE javax.servlet中的RequestDispatcher接口

    RequestDispatcher接口 public interface RequestDispatcher 一.介绍 定义一个对象,从客户端接收请求并将其发送到服务器上的任何资源(例如servlet ...

  7. 移动站Web开发图片自适应两种常见情况解决方案

    本文主要说的是Web中图片根据手机屏幕大小自适应居中显示,图片自适应两种常见情况解决方案.开始吧 在做配合手机客户端的Web wap页面时,发现文章对图片显示的需求有两种特别重要的情况,一是对于图集, ...

  8. luogu题解P2502[HAOI2006]旅行--最小生成树变式

    题目链接 https://www.luogu.org/problemnew/show/P2502 分析 一个很\(naive\)的做法是从\(s\)到\(t\)双向BFS这当然会TLE 这时我就有个想 ...

  9. std::list保存大量数据时,类型即是无析构函数,该list析构时会占用大量CPU

    std::list保存大量数据时,类型即是无析构函数,该list析构时会占用大量CPU

  10. 利用Cmake 将最新版本OBS编译成windows版本。

    准备工作: 1. VS2013 的最新更新版或者VS2015 2. QT Creater 5.7   https://www.qt.io/ 3.  CMake (cmake-gui) 4. obs 依 ...