建图很神奇..建完图其实就是裸的费用流了..

--------------------------------------------------------------

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<vector>
#include<queue>
#define rep(i,n) for(int i=0;i<n;++i)
#define clr(x,c) memset(x,c,sizeof(x))
#define Rep(i,l,r) for(int i=l;i<=r;++i)
using namespace std;
const int inf=0x3f3f3f3f;
const int maxn=602+5;
struct Edge {
int from,to,cap,flow,cost;
Edge(int u,int v,int c,int f,int w):
from(u),to(v),cap(c),flow(f),cost(w) {}
};
struct mcmf {
int d[maxn];
int p[maxn];
int a[maxn];
bool inq[maxn];
int n,s,t;
vector<int> g[maxn];
vector<Edge> edges;
void init(int n) {
this->n=n;
rep(i,n) g[i].clear();
edges.clear();
}
void addEdge(int u,int v,int c,int w) {
edges.push_back( Edge(u,v,c,0,w) );
edges.push_back( Edge(v,u,0,0,-w) );
g[u].push_back(edges.size()-2);
g[v].push_back(edges.size()-1);
}
bool spfa(int &flow,int &cost) {
clr(d,inf); clr(inq,0);
queue<int> q; q.push(s);
a[s]=inf; d[s]=0; inq[s]=1; p[s]=0;
while(!q.empty()) {
int x=q.front(); q.pop();
inq[x]=0;
rep(i,g[x].size()) {
Edge &e=edges[g[x][i]];
if(e.cap>e.flow && d[e.to]>d[x]+e.cost) {
d[e.to]=d[x]+e.cost;
p[e.to]=g[x][i];
a[e.to]=min(a[x],e.cap-e.flow);
if(!inq[e.to]) { q.push(e.to); inq[e.to]=1; }
}
}
}
if(d[t]==inf) return false;
flow+=a[t];
cost+=a[t]*d[t];
int x=t;
while(x!=s) {
edges[p[x]].flow+=a[t];
edges[p[x]^1].flow-=a[t];
x=edges[p[x]].from;
}
return true;
}
int minCost(int s,int t) {
this->s=s; this->t=t;
int flow=0,cost=0;
while(spfa(flow,cost));
return cost;
}
} g;
int main()
{
// freopen("test.in","r",stdin);
//freopen("test.out","w",stdout);
int m,n;
scanf("%d%d",&m,&n);
int t=n*m;
int S=0,T=t+n+1;
g.init(T+1);
Rep(i,1,n)
   rep(j,m) {
int w;
scanf("%d",&w);
Rep(k,1,n) g.addEdge(j*n+k,t+i,1,w*k);
   }
Rep(i,1,n) g.addEdge(i+t,T,1,0);
Rep(i,1,t) g.addEdge(0,i,1,0);
printf("%.2lf\n",(double)g.minCost(S,T)/n);
return 0;
}

--------------------------------------------------------------

1070: [SCOI2007]修车

Time Limit: 1 Sec  Memory Limit: 162 MB
Submit: 2762  Solved: 1099
[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)

转载于:https://www.cnblogs.com/JSZX11556/p/4393167.html

BZOJ 1070: [SCOI2007]修车(最小费用最大流)相关推荐

  1. [BZOJ 1070][SCOI2007]修车(费用流)

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

  2. BZOJ 1070: [SCOI2007]修车(费用流)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1070 题意: 思路: 神奇的构图. 因为排在后面的人需要等待前面的车修好,这里将每个技术人员拆成n个 ...

  3. bzoj 1070: [SCOI2007]修车【最小费用最大流】

    一开始从客人角度想的,怎么建都不对 从一个修车工所接待的所有顾客花费的总时间来看,设一共有x个人,那么第一个修的对总时间的贡献是x*w1,第二个是(x-1)*w2-以此类推.所以把第i个修车工拆成n组 ...

  4. BZOJ 1070: [SCOI2007]修车

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

  5. BZOJ 2597 剪刀石头布(最小费用最大流)(WC2007)

    Description 在一些一对一游戏的比赛(如下棋.乒乓球和羽毛球的单打)中,我们经常会遇到A胜过B,B胜过C而C又胜过A的有趣情况,不妨形象的称之为剪刀石头布情况.有的时候,无聊的人们会津津乐道 ...

  6. 修车-最小费用最大流

    题目描述 得到一个教训:不要妄想在网络流里面在线修改什么东西:在一开始建模的时候,就应该吧所有的可能考虑进去. #include<cstdio> #include<cstring&g ...

  7. 洛谷 P2053 [SCOI2007]修车 网络流 最小费用最大流 Dinic+Spfa

    题目链接: https://www.luogu.com.cn/problem/P2053 思路参考博客: https://www.luogu.com.cn/blog/a23333/solution-p ...

  8. [SCOI2007]修车,洛谷P2053,最小费用最大流

    正题 给出m个师傅,n台车,并给出每个师傅各个车的时间,现在要使得,n辆车一起来,等待时间最短. 我们来观察一个师傅所消耗的等待时间.m个师傅所消耗的总等待时间就是车主的总等待时间. 对于第a个师傅, ...

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

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

最新文章

  1. Imagination推出全新多核GPU IP系列:提供33种不同配置,AI算力达24 TOPS
  2. 用Understand阅读 VS2010项目源码
  3. Python开发Day03
  4. 【面试招聘】如何写出发光的简历|附10个模版
  5. 如何看待瘦身成功版BERT——ALBERT?
  6. 模拟退火算法求解旅行商问题(python实现)
  7. pat1043. Is It a Binary Search Tree (25)
  8. 解决- SecureCRT上运行 linux vim 命令中文出现乱码
  9. stl取出字符串中的字符_在C ++ STL中使用比较运算符比较两个字符串
  10. ios 数字键盘左下角添加按钮_IOS数字键盘左下角添加完成按钮的实现方法
  11. Apache Log4j2远程JNDI代码执行漏洞修复
  12. 扩展Jquery方法创建LigerUI Grid
  13. 基于大数据的个性化推荐系统
  14. Matplotlib可视化图表
  15. 找到了airdrop无法发现对方的原因了,原因你想不到!
  16. Ubuntu 安装Chrome(DEB 出现问题使用)
  17. 网络系统管理模块B考核题目(windows2019)
  18. dialog.js弹窗插件
  19. VRTK4.0学习(六):给控制器添加激光射线
  20. MAC的GIF动图录屏软件LICECAP

热门文章

  1. mac下安装caffe
  2. 【C++】局部变量、全局变量、静态变量与动态对象的性质
  3. Matlab--view函数详解
  4. 在Windows下使用CMake+MinGW搭建C/C++编译环境
  5. python使用pip离线下载并安装包
  6. python 股票数据_从互联网获取股票数据(历史数据,Python + MySQL)
  7. iphone短信尚未送达_潮讯:iPhone12重大升级;华为麒麟被炒价;抖音上线云游戏;骚扰短信要凉了;一加刘作虎回归OPPO...
  8. python中key的意思_python中的key是什么意思
  9. 【linux】Centos 8 安装 悟空CRM-11.0
  10. linux输出文件没有找到,Linux环境下标准输入、输出、错误信息详解