1070: [SCOI2007]修车

Time Limit: 1 Sec   Memory Limit: 162 MB
Submit: 3512   Solved: 1408
[ Submit][ Status][ Discuss]

Description

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

Input

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

Output

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

Sample Input

2 2
3 2
1 4

Sample Output

1.50

HINT

数据范围: (2<=M<=9,1<=N<=60), (1<=T<=1000)

Source

又是一道构图巧妙的费用流题。

把每个技术人员拆成n个点,表示倒数第一个做的、倒数第二个做的、倒数第三个做的......

那么对于一辆车,如果它是倒数第x做的,耗时为y,那么它对总时间的贡献是x*y(这是很好理解的)。

所以我们就可以这样连边,然后跑费用流。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<algorithm>
#include<queue>
#define F(i,j,n) for(int i=j;i<=n;i++)
#define D(i,j,n) for(int i=j;i>=n;i--)
#define ll long long
#define pa pair<int,int>
#define maxn 10000
#define maxm 200000
#define inf 1000000000
using namespace std;
struct edge_type
{int from,to,next,v,c;
}e[maxm];
int head[maxn],dis[maxn],p[maxn],a[61][10];
int n,m,cnt=1,ans=0,s,t;
bool inq[maxn];
inline int read()
{int x=0,f=1;char ch=getchar();while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}while (ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*f;
}
inline void add_edge(int x,int y,int v,int c)
{e[++cnt]=(edge_type){x,y,head[x],v,c};head[x]=cnt;e[++cnt]=(edge_type){y,x,head[y],0,-c};head[y]=cnt;
}
inline bool spfa()
{queue<int> q;memset(inq,false,sizeof(inq));F(i,1,t) dis[i]=inf;dis[s]=0;inq[s]=true;q.push(s);while (!q.empty()){int x=q.front();inq[x]=false;q.pop();for(int i=head[x];i;i=e[i].next){int y=e[i].to;if (e[i].v&&dis[y]>dis[x]+e[i].c){dis[y]=dis[x]+e[i].c;p[y]=i;if (!inq[y]){inq[y]=true;q.push(y);}}}}return dis[t]!=inf;
}
inline void mcf()
{while (spfa()){int tmp=inf;for(int i=p[t];i;i=p[e[i].from]) tmp=min(tmp,e[i].v);ans+=dis[t]*tmp;for(int i=p[t];i;i=p[e[i].from]){e[i].v-=tmp;e[i^1].v+=tmp;}}
}
int main()
{m=read();n=read();s=m*n+n+1;t=s+1;F(i,1,n) F(j,1,m) a[i][j]=read();F(i,1,n) add_edge(s,i,1,0);F(i,1,n) F(j,1,m) F(k,1,n) add_edge(i,j*n+k,1,a[i][j]*k);F(i,n+1,m*n+n) add_edge(i,t,1,0);mcf();printf("%.2f\n",ans*1.0/n);
}

bzoj1070【SCOI2007】修车相关推荐

  1. bzoj1070: [SCOI2007]修车 网络流

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

  2. bzoj1070: [SCOI2007]修车-费用流

    Description 同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的.现在需要安排这M位技术人员所维修的车及顺序,使 ...

  3. bzoj1070: [SCOI2007]修车

    本来想写美食节的..但是动态加点不会,今晚有点困,所以就写这题弱化版了. 然后做法就是把一个修理工拆成n个,表示倒数第几个修当前这辆车,这样做的原因就是修一部车的影响是对于后面的车的. 复习一波费用流 ...

  4. bzoj1070 [SCOI2007]修车 费用流+拆分

    这个题一开始容易想到最暴力的建法,由于前面的决策影响后面的人的等待时间,所以就枚举第几个选第几辆, 由于有后面受前面影响,所以也可以看成前面对后面影响,影响的最多n个,所以就枚举影响建图,由于3辆车 ...

  5. luogu P2053 [SCOI2007]修车(费用流提前计算)

    P2053 [SCOI2007]修车 要求平均时间最短,就等同于要求总时间最短. 一个人维修所花的时间,对同一位技术人员之后维修造成的影响是已知且固定的.那么,我们将费用提前计算.即将第 i 位车主的 ...

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

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

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

    建图很神奇..建完图其实就是裸的费用流了.. -------------------------------------------------------------- #include<cs ...

  8. BZOJ 1070: [SCOI2007]修车

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

  9. luogu P2053 [SCOI2007]修车

    P2053 [SCOI2007]修车 题目描述 同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的.现在需要安排这M位技术 ...

  10. [SCOI2007]修车【最大流最小费用】

    P2053 [SCOI2007]修车 这道题的思路当真是很不错了,首先,N和M都不是很大.(这是废话了) 然后,看到等修车的时间是一个和的形式,因为从某一时刻进去大家都在等,然后修了的第一批的人的消耗 ...

最新文章

  1. 用vs2010打开使用vs2013升级后的WP工程
  2. Centos下安装FTP并进行虚拟用户访问方式配置
  3. optee运行时来了一个REE(linux)中断--代码导读
  4. python为什么用两个等于号_刷Leetcode学python(一)两数之和
  5. 【算法图解|5】javaScript求两个数的最大公约数
  6. mix2线刷开发板救砖_小米Mix 2(安卓8.0)一键救砖教程,轻松刷回官方系统
  7. React基础篇(二)之点击button修改属性值
  8. 加密模式 openssl sm4_OpenSSL/GmSSL 动态引擎
  9. 181008有道扇贝每日一句
  10. 树莓派pi 4 编译 linuxcnc
  11. ChartControl柱状图指定每一个柱子的颜色
  12. java权限管理面试_java shiro面试题
  13. Android Studio Entry name *.xml collided解决方案
  14. Huffman-哈夫曼编码算法详解
  15. html中dom什么意思,dom属性是什么意思啊 html dom是什么意思,通俗易懂
  16. python泰勒公式计算e的x次方_e的x次方在x0=0的泰勒展开式
  17. C语言show用法,show的用法及句型
  18. java 鼠标变成手型_当鼠标放在按钮上时让指针变为手型
  19. mysql plus多表关联_结合mybatis-plus 实现实体操作多表关联查询
  20. SSH java 面试题

热门文章

  1. 芯片龙头股票遭青睐 恒大现身次新军工股!
  2. Shell:标准输入(stdin)、标准输出(stdout)、标准错误输出(stderr)介绍
  3. 2020全世界顶级自行车价格表中国十大碳纤维自行车品牌排行榜
  4. 打造全自动漏洞赏金扫描工具
  5. 【Java面试小短文】当任务数超过线程池的核心线程数,如何让它不进入阻塞队列直接启用最大数量的线程去执行任务?
  6. 一天赚 6300 多万,四川某加密币矿场实拍曝光;希捷预告 120TB 机械硬盘
  7. Excel根据某单元格是否为空自动填充当前日期和时间
  8. 智过网:一级建造师证书可以同时注册的证书!
  9. pe给水管施工方案详细介绍
  10. HTML/CSS设置网页背景