传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1070;

题目概括:

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

看到这个大概就应该知道是费用流了吧,可是怎么处理一个人等其他人的时间呢? 显然拆点撒,拆T组点,每个人向第j的机器的第z个修的点连一条边,权植为z*time[i][j](为什么是这个呢?

因为你在修的时候别人和你都在等待),所以这道题就这样写完了,但感觉点有点多,所以就写了个(zkw费用流)但是是抄模板的。。。。。醉(好歹有点理解也是好的);

普通费用流也可以过,只不过要小心点.........

 #include<iostream>
#include<cstring>
#include<cstdio>
#define inf 0x7fffffff
#define maxn 500000
int n,m,tot,s,t,ans;
int pre[maxn],v[maxn],cap[maxn],dis[maxn],sla[maxn],now[maxn],cost[maxn];
int a[][];
bool vis[maxn];
using namespace std;
int num(int i,int j)
{
return (i*n+j);
}
void ins(int a,int b, int c, int d)
{
tot++; pre[tot]=now[a]; now[a]=tot; v[tot]=b; cap[tot]=c; cost[tot]=d;
}
void insert(int a, int b, int c, int d)
{
ins(a,b,c,d); ins (b,a,,-d);
}
int kk(int x, int f)
{
int left=f;
if (x==t) {ans+=f*dis[s]; return f;
}
vis[x]=;
for (int i=now[x]; i; i=pre[i])
{
if (cap[i]> && !vis[v[i]])
{
if (dis[v[i]]+cost[i]-dis[x]==)
{
int delt=kk(v[i],min(cap[i],left));
if (delt>) cap[i]-=delt,cap[i^]+=delt,left-=delt;
if (left==) return f; }
else
sla[v[i]]=min(sla[v[i]],dis[v[i]]+cost[i]-dis[x]);
}
}
return (f-left);
}
bool dfs()
{
int delt=inf;
for (int i=s; i<=t; i++)
if (!vis[i]) delt=min(delt,sla[i]),sla[i]=inf;
if (delt==inf ) return true;
for (int i=s; i<=t; i++)
if (vis[i]) dis[i]+=delt;
return false;
}
void zkw()
{
for (int i=s; i<=t; i++) dis[i]=,sla[i]=inf;
do{
do {memset(vis,,sizeof(vis));
} while(kk(s,inf)); }while (!dfs());
}
int main()
{
scanf("%d%d",&m,&n);
for (int i=; i <=n; i++) for (int j=; j<=m; j++) scanf("%d",&a[i][j]);
tot=;
s=; t=n*m+n+;
for (int i=; i<=n; i++) insert(s,i,,);
for (int i=; i<=n; i++)
for (int j=; j<=m; j++)
for (int z=; z<=n; z++)
{
insert(i,num(j,z),,z*a[i][j]);
}
for (int i=; i<=m; i++)
for (int j=; j<=n; j++)
insert(num(i,j),t,,);
zkw();
printf("%.2lf\n",(1.0*ans)/(1.0*n));
}

bzoj1070————2016——3——14的更多相关文章

  1. 2016.09.14,英语,《Using English at Work》全书笔记

    半个月时间,听完了ESLPod出品的<Using English at Work>,笔记和自己听的时候的备注列在下面.准备把每个语音里的快速阅读部分截取出来,放在手机里反复听. 下一阶段把 ...

  2. Murano Weekly Meeting 2016.06.14

    Meeting time: 2016.June.14 1:00~2:00 Chairperson:  Kirill Zaitsev, from Mirantis Meeting summary: 1. ...

  3. 2016.10.14,英语,《American Accent Training》

    这本书是讲述美语发音训练的.已经看了一段时间了,决定向周叶学习,记录读书笔记.计划每天花半个小时,学习3节左右的音频(按照CD TRACK),并完成训练. CD1 Track1 What is Acc ...

  4. nginx学习记录/2016.11.14

    nginx(engine X)是一个高性能的web服务器和反向代理服务器以及电子邮件代理服务器 由俄罗斯的程序设计师Igor Sysoev所开发 nginx+tomcat实现负载均衡 参考地址:htt ...

  5. 2016.11.14测试 长乐一中2014NOIP复赛模拟题 第一题。

    1.正确答案 [题目描述] 小H与小Y刚刚参加完UOIP外卡组的初赛,就迫不及待的跑出考场对答案. "吔,我的答案和你都不一样!",小Y说道,"我们去找神犇们问答案吧&q ...

  6. 2016.8.14安装myplayer心得

    安装mplayer时,我有两个os是not found状态,我在其他地方找到后 which mplayer,找到mplayer的配置界面,找到not found的部分,并且从usr/lib中找到相应的 ...

  7. 2016.9.14 JavaScript入门之七面向对象和函数

    1.JavaScript中的变量,可以是对象,具有相应的属性: 2.我们也能够使用构造函数创建对象.构造函数的函数给出了一个大写的名称,以使它清楚地表明它是一个构造函数. 在构造函数中,这个变量是指由 ...

  8. 2016.8.14 HTML5重要标签以及属性学习

    1.响应网格系统,这使得它很容易把元素放在行,并指定每个元素的相对宽度 . 要注意的是: 在使用网格布局系统之前,要不把布局的元素都添加到同一个<div>中,而且这个<div> ...

  9. 2016.8.14 HTML5重要标签及其属性学习

    1.移动端的CSS: 一般需要引入下面的外部样式表: <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/ ...

随机推荐

  1. HDU 5903 (DP)

    #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> ...

  2. Java的SSH框架

    SSH 为 struts+spring+hibernate的一个集成框架,是目前较流行的一种Web应用程序开源框架.   1.业务流程  集成SSH框架的系统从职责上分为四层:表示层.业务逻辑层.数据 ...

  3. Ubuntu root 密码设置及远程登录

    1. 修改 root 密码 sudo passwd root 2. 以其他账户登录,通过 sudo nano 修改 /etc/ssh/sshd_config : xxx@ubuntu14:~$ su ...

  4. MySQL5.1升级5.6后,执行grant出错:ERROR 2013 (HY000): Lost connection to MySQL server during query【转载】

    转载: MySQL5.5升级5.6后,执行grant出错:ERROR 2013 (HY000): Lost connection to -mysql教程-数据库-壹聚教程网http://www.111 ...

  5. php源码分析之base64_encode函数

    base64_encode编码规律分析 字符串长度除以3向上取整乘以4等于编码后的字符串长度 ceil(strlen($string)/3)*4 = strlen(base64_encode($str ...

  6. SQL查询重复记录

    假设现有一张人员表(表名:Person),若想将姓名.身份证号.住址这三个字段完全相同的记录查找出来,使用 1: SELECT p1.* 2: FROM persons p1,persons p2 3 ...

  7. javascript OOP 面向对象编程

    Pseudo-class declaration 原文地址:http://javascript.info/tutorial/pseudo-classical-pattern#pseudo-class- ...

  8. Eclipse/MyEclipse 最最常用的快捷键

    F 键类 F2 显示详细信息 F3 跳到声明或定义的地方 Ctrl + 键类 Ctrl+1 快速修复 ( 最经典的快捷键 , 就不用多说了 ) Ctrl+D 删除当前行 Ctrl+E 快速显示当前 E ...

  9. 设计一个 iOS 控件

    转载自:http://blog.csdn.net/zhangao0086/article/details/45622875 代码的等级:可编译.可运行.可测试.可读.可维护.可复用 前言 一个控件从外 ...

  10. Android Studio调试功能使用总结---转

    Android Studio调试功能使用总结[转]   这段时间一直在使用Intellij IDEA, 今天把调试区工具的使用方法记录于此. 先编译好要调试的程序. 1.设置断点 选定要设置断点的代码 ...