如果能想到费用流,这道题就是显然了。

要求所有人的等待平均时间最小,也就是所有人的总等待时间最小。

每辆车只需要修一次,所以s连每辆车容量为1,费用为0的边。 现在需要把每个人拆成n个点,把车和每个人的第k个点连一条容量为1,费用为cost[i][j]*k的边。

最后把每个人拆完后的点向汇点连一条容量为1,费用为0的边。

#include<iostream>
#include<cstdio>
#include<cstring>
#define inf 0x7fffffff
#define T 601
using namespace std;
int n,m,cnt=,ans,t[][];
int d[],q[],from[],head[];
bool mark[];
struct edge{int from,to,next,c,v;}e[];
void ins(int u,int v,int w,int c)
{
cnt++;
e[cnt].from=u;e[cnt].to=v;
e[cnt].next=head[u];head[u]=cnt;
e[cnt].c=c;e[cnt].v=w;
}
void insert(int u,int v,int w,int c)
{ins(u,v,w,c);ins(v,u,,-c);}
bool spfa()
{
memset(mark,,sizeof(mark));
for(int i=;i<=T;i++)d[i]=inf;
int t=,w=;
d[T]=;mark[T]=;q[]=T;
while(t!=w)
{
int now=q[t];t++;if(t==T)t=;
for(int i=head[now];i;i=e[i].next)
if(e[i^].v&&d[e[i].to]>d[now]-e[i].c)
{
d[e[i].to]=d[now]-e[i].c;
if(!mark[e[i].to])
{mark[e[i].to]=;q[w++]=e[i].to;if(w==T)w=;}
}
mark[now]=;
}
if(d[]==inf)return ;
return ;
}
int dfs(int x,int f)
{
if(x==T){mark[T]=;return f;}
int used=,w;
mark[x]=;
for(int i=head[x];i;i=e[i].next)
if(!mark[e[i].to]&&e[i].v&&d[x]-e[i].c==d[e[i].to])
{
w=f-used;
w=dfs(e[i].to,min(e[i].v,w));
ans+=w*e[i].c;
e[i].v-=w;e[i^].v+=w;
used+=w;if(used==f)return f;
}
return used;
}
void zkw()
{
while(spfa())
{
mark[T]=;
while(mark[T])
{
memset(mark,,sizeof(mark));
dfs(,inf);
}
}
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)
for(int j=;j<=n;j++)
scanf("%d",&t[i][j]);
for(int i=;i<=n*m;i++)
insert(,i,,);
for(int i=n*m+;i<=n*m+m;i++)
insert(i,T,,);
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
for(int k=;k<=m;k++)
insert((i-)*m+j,n*m+k,,t[k][i]*j);
zkw();
printf("%.2lf",(double)ans/m);
return ;
}

BZOJ 1070 修车(费用流)的更多相关文章

  1. bzoj 1070 修车 —— 费用流

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1070 需要考虑前面修的车对后面等待的车造成的时间增加: 其实可以从每个人修车的顺序考虑,如果 ...

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

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

  3. BZOJ 1070 修车 【费用流】

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

  4. 【BZOJ 1070】[SCOI2007]修车 费用流

    就是拆个点限制一下(两点一排一大片),这道题让我注意到了限制这个重要的词.我们跑网络流跑出来的图都是有一定意义的,一般这个意义就对应了问题的一种方案,一般情况下跑一个不知道对不对的方案是相对容易的我们 ...

  5. BZOJ 1070 修车(最小费用流)

    链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1070 同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术 ...

  6. BZOJ 1070 修车

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

  7. P2053 [SCOI2007]修车 费用流

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

  8. [SCOI2007][bzoj1070] 修车 [费用流]

    题面 传送门 思路 我们考虑某个工人修车的从前到后序列如下: ${W_1,W_2,W_3,...,W_n}$ 那么,对于这n辆车的车主而言,他们等候的总时间为: $\sum_{i=1}^{n}W_i\ ...

  9. [bzoj1070][SCOI2007]修车——费用流

    题目大意: 传送门 题解: 本题和(POJ3686)[http://poj.org/problem?id=3686]一题一模一样,而且还是数据缩小以后的弱化版QAQ,<挑战程序设计竞赛>一 ...

随机推荐

  1. JavaScript基础part1

    JavaScript介绍 你不知道它是什么就学?这就是一个网页嵌入式脚本语言...仅此而已 JavaScript组成 一个完整的 JavaScript 实现是由以下 3 个不同部分组成的: 核心(EC ...

  2. 全球订单最多的成都优步推出"南北通勤线"业务

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  3. Java:内存泄露和内存溢出

    1. 内存溢出 (Memory Overflow) 是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory:比如申请了一个integer,但给它存了long才能存下的数,那就 ...

  4. svn 撤销 已提交的修改

    1.保证我们拿到的是最新代码:  svn update  假设最新版本号是28.  2.然后找出要回滚的确切版本号:  svn log [something]  假设根据svn log日志查出要回滚的 ...

  5. Ubuntu16.04比较好的一系列软件安装介绍

    https://blog.csdn.net/Gerald_Jones/article/details/80784976

  6. POSTMan 快速上手(一图带你玩 Postman )

    POSTMan 快速上手(一图带你玩 Postman ):

  7. Linux命令应用大词典-第35章 终端

    35.1 tty:显示当前连接到当前标准输入的终端设备文件名 35.2 consoletype:显示连接到标准输入的控制台类型 35.3 fgconsole:显示活动的虚拟终端数量 35.4 ming ...

  8. 【WXS全局对象】Math

    Math对象用于执行数学任务. 属性: 名称 说明 Math.E 代表算术常量 e,即自然对数的底数,其值近似于 2.71828. Math.LN10 就是 loge10,即 10 的自然对数,其值近 ...

  9. selenium常用操作方法

    Webdriver中比较常用的操作元素的方法: clear() 清除输入框的默认内容 send_keys("xxx") 在一个输入框里输入xx内容 ——如果输入中文,则需要在脚本开 ...

  10. dotnetframe的清理工具

    微软的产品一向不敢恭维,卸载都没有办法卸载干净,卸载又慢又不彻底,dotnet被我卸载之后还有注册表残留以至于无法重新安装. .NET Framework Cleanup Tool真的很好用,全部版本 ...