[SCOI2007]修车(建图好题)
[SCOI2007]修车
https://www.lydsy.com/JudgeOnline/problem.php?id=1070
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 7306 Solved: 3108
[Submit][Status][Discuss]
Description
同一时刻有N位车主带着他们的爱车来到了汽车维修中心。维修中心共有M位技术人员,不同的技术人员对不同
的车进行维修所用的时间是不同的。现在需要安排这M位技术人员所维修的车及顺序,使得顾客平均等待的时间最
小。 说明:顾客的等待时间是指从他把车送至维修中心到维修完毕所用的时间。
Input
第一行有两个m,n,表示技术人员数与顾客数。 接下来n行,每行m个整数。第i+1行第j个数表示第j位技术人
员维修第i辆车需要用的时间T。
Output
最小平均等待时间,答案精确到小数点后2位。
Sample Input
3 2
1 4
Sample Output
HINT
数据范围: (2<=M<=9,1<=N<=60), (1<=T<=1000)
将一个工人拆成n个点,第k个点表示这个工人倒数第k个修车i,那么每辆车向工人连一条容量为1,费用为k*c,
表示修自己的车的一个费用,和后面k-1个人等待的费用,就是算自己费用的同时算上别人的费用。
- #include<iostream>
- #include<algorithm>
- #include<queue>
- #include<cstring>
- #include<cstdio>
- using namespace std;
- const int INF=0x3f3f3f3f;
- const int N=;
- const int M=;
- int top;
- int dist[N],pre[N];
- bool vis[N];
- int c[N];
- int maxflow;
- struct Vertex{
- int first;
- }V[N];
- struct Edge{
- int v,next;
- int cap,flow,cost;
- }E[M];
- void init(){
- memset(V,-,sizeof(V));
- top=;
- maxflow=;
- }
- void add_edge(int u,int v,int c,int cost){
- E[top].v=v;
- E[top].cap=c;
- E[top].flow=;
- E[top].cost=cost;
- E[top].next=V[u].first;
- V[u].first=top++;
- }
- void add(int u,int v,int c,int cost){
- add_edge(u,v,c,cost);
- add_edge(v,u,,-cost);
- }
- bool SPFA(int s,int t,int n){
- int i,u,v;
- queue<int>qu;
- memset(vis,false,sizeof(vis));
- memset(c,,sizeof(c));
- memset(pre,-,sizeof(pre));
- for(i=;i<=n;i++){
- dist[i]=INF;
- }
- vis[s]=true;
- c[s]++;
- dist[s]=;
- qu.push(s);
- while(!qu.empty()){
- u=qu.front();
- qu.pop();
- vis[u]=false;
- for(i=V[u].first;~i;i=E[i].next){
- v=E[i].v;
- if(E[i].cap>E[i].flow&&dist[v]>dist[u]+E[i].cost){
- dist[v]=dist[u]+E[i].cost;
- pre[v]=i;
- if(!vis[v]){
- c[v]++;
- qu.push(v);
- vis[v]=true;
- if(c[v]>n){
- return false;
- }
- }
- }
- }
- }
- if(dist[t]==INF){
- return false;
- }
- return true;
- }
- int MCMF(int s,int t,int n){
- int d;
- int i,mincost;
- mincost=;
- while(SPFA(s,t,n)){
- d=INF;
- for(i=pre[t];~i;i=pre[E[i^].v]){
- d=min(d,E[i].cap-E[i].flow);
- }
- maxflow+=d;
- for(i=pre[t];~i;i=pre[E[i^].v]){
- E[i].flow+=d;
- E[i^].flow-=d;
- }
- mincost+=dist[t]*d;
- // cout<<dist[t]<<" "<<d<<endl;
- }
- return mincost;
- }
- int main(){
- int n,m;
- int v,u,w,c;
- int s,t;
- scanf("%d %d",&m,&n);
- s=,t=m*n+n+;
- init();
- //s->people->car->t
- for(int i=;i<=n;i++){//车
- for(int j=;j<=m;j++){//人
- scanf("%d",&c);
- for(int k=;k<=n;k++){
- add((j-)*n+k,m*n+i,,c*k);
- }
- }
- }
- for(int i=;i<=m;i++){
- for(int j=;j<=n;j++){
- add(s,n*(i-)+j,,);
- }
- }
- for(int i=;i<=n;i++){
- add(m*n+i,t,,);
- }
- double ans=MCMF(s,t,n+m*n+);
- printf("%.2f\n",ans/n);
- }
- /*
- 2 2
- 3 2
- 1 4
- 2 3
- 1 2 3
- 4 5 6
- */
[SCOI2007]修车(建图好题)的更多相关文章
- poj 3281 Dining 网络流-最大流-建图的题
题意很简单:JOHN是一个农场主养了一些奶牛,神奇的是这些个奶牛有不同的品味,只喜欢吃某些食物,喝某些饮料,傻傻的John做了很多食物和饮料,但她不知道可以最多喂饱多少牛,(喂饱当然是有吃有喝才会饱) ...
- joj 2453 candy 网络流建图的题
Problem D: Candy As a teacher of a kindergarten, you have many things to do during a day, one of whi ...
- POJ 2195 一人一房 最小费用流 建图 水题
Going Home Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 21010 Accepted: 10614 Desc ...
- CF786B Legacy 线段树优化建图 + spfa
CodeForces 786B Rick和他的同事们做出了一种新的带放射性的婴儿食品(???根据图片和原文的确如此...),与此同时很多坏人正追赶着他们.因此Rick想在坏人们捉到他之前把他的遗产留给 ...
- 7月13日考试 题解(DFS序+期望+线段树优化建图)
T1 sign 题目大意:给出一棵 N 个节点的树,求所有起点为叶节点的有向路径,其 上每一条边权值和的和.N<=10000 水题.考试的时候毒瘤出题人(学长orz)把读入顺序改了一下,于是很多 ...
- BZOJ-1070 修车 最小费用最大流+拆点+略坑建图
1070: [SCOI2007]修车 Time Limit: 1 Sec Memory Limit: 162 MB Submit: 3624 Solved: 1452 [Submit][Status] ...
- hdu 4444 Walk (离散化+建图+bfs+三维判重 好题)
Walk Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Submi ...
- LibreOJ #6008. 「网络流 24 题」餐巾计划 最小费用最大流 建图
#6008. 「网络流 24 题」餐巾计划 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据 题目描述 ...
- Battle ships(二分图,建图,好题)
Battle ships Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Tot ...
随机推荐
- python 可视化 二维坐标标注等等
基本画图操作: import matplotlib.pyplot as plt import numpy as np x = np.linspace(-3,3,50) y1 = 2*x+1 y2 = ...
- CentOS 6.4 添加永久静态路由所有方法汇总(原创)
转摘,原文章地址:http://blog.sina.com.cn/s/blog_828e50020101ern5.html 查看路由的命令route -n CentOS添加永久静态路由 在使用双网卡, ...
- mongodb 怎样检测 安装成功 以及mongodb的一些增删改查命令
mongodb 主页 http://www.mongodb.org/ 1.先在网上下载一个mongodb的安装包,再打开cmd命令,找到你装mongodb的文件的路径,进到mongodb的文件下的li ...
- 手贱,写个call玩玩.
今天在睡觉醒时,突然感觉对call和apply有了点理解,但是又不好表达出来.就随便写几个例子. function say() { return this.role; } function Fathe ...
- Install hadoop on windows(non-virtual machine, such cygwin)
DownloadBefore starting make sure you have this two softwares Hadoop 2.7.1 Java – Jdk 1.7+ Extract d ...
- Spring Batch批处理以及编程模型
1.批处理: 类似于SQL里面的批处理提交 2.场景: 业务定时进行批处理操作,但是批处理的编程模型是怎么的呢? 3.开源框架 Spring Batch 4.编程模型: reader-processo ...
- php parse_str() 函数
php parse_str() 函数把查询字符串解析到变量中,主要用于页面之间传值(参数).本文章向码农介绍php parse_str() 函数的使用方法,感兴趣的码农可以参考一下. 定义和用法 pa ...
- ATM+购物商城
知识内容: 1.luffy买tesla 2.ATM+购物商城 一.luffy买tesla 需求: 1.目录结构说明 account luffy.json --> 存储用户账户信息 {" ...
- python之Web服务器案例
HTTP协议简介 1. 使用谷歌/火狐浏览器分析 在Web应用中,服务器把网页传给浏览器,实际上就是把网页的HTML代码发送给浏览器,让浏览器显示出来.而浏览器和服务器之间的传输协议是HTTP,所以: ...
- jdk下载--操作系统
不同的操作系统需要下载不同的jdk. 查看操作系统的命令: Window系统下:>winver Linux和Unix系统下: >uname -a 根据系统不同选用不同的jdk: 下载地址: ...