P2053 [SCOI2007]修车(费用流)
顾客平均等待的最小时间$=$等待总时间$/n$
考虑只有1个技术人员时,$n$辆车等待总时间
$A_1+(A_1+A_2)+(A_1+A_2+A_3)+...+\sum_{i=1}^{n}A_i$
发现第$k$个修第$i$辆车的代价为$A_i*(n-k+1)$
为了方便我们把它换个形式
倒着第$k$个修第$i$辆车的代价为$A_i*k$
想到可以用费用流解决
于是我们可以把 第$i$个人倒着第$k$个修第$j$辆车 当成一个点
车代表的点向该点连一条边 流量$=1$,费用$=A_{i,j}*k$
该点再向虚拟汇点T连一条边 流量$=1$,费用$=0$
最后再从虚拟源点$S$向每辆车连一条边 流量$=1$,费用$=0$
蓝后就可以愉快地跑费用流辣
注意输入时顺序为$m,n$
- #include<iostream>
- #include<cstdio>
- #include<cstring>
- #include<queue>
- using namespace std;
- #define N 100005
- int n,m,S,T,d[N],a[N],p[N],tot;
- bool inh[N];
- queue <int> h;
- int cnt=,hd[N],nxt[N],ed[N],poi[N],val[N],cost[N];
- inline void adde(int x,int y,int v1,int v2){
- nxt[ed[x]]=++cnt, hd[x]=hd[x]?hd[x]:cnt,
- ed[x]=cnt, poi[cnt]=y, val[cnt]=v1, cost[cnt]=v2;
- }
- inline void link(int x,int y,int v1,int v2){adde(x,y,v1,v2),adde(y,x,,-v2);}
- bool bfs(){//裸的费用流
- memset(d,,sizeof(d)); int inf=d[];
- h.push(S); d[S]=; a[S]=inf; inh[S]=;
- while(!h.empty()){
- int x=h.front(); h.pop(); inh[x]=;
- for(int i=hd[x];i;i=nxt[i]){
- int to=poi[i];
- if(val[i]&&d[to]>d[x]+cost[i]){
- d[to]=d[x]+cost[i]; p[to]=i;
- a[to]=min(a[x],val[i]);
- if(!inh[to]) h.push(to),inh[to]=;
- }
- }
- }if(d[T]==inf) return ;
- tot+=a[T]*d[T];
- for(int i=T;i!=S;i=poi[p[i]^])
- val[p[i]]-=a[T],val[p[i]^]+=a[T];
- return ;
- }
- int main(){
- scanf("%d%d",&m,&n); int w=n*m,q;
- S=w+n+; T=S+;
- for(int i=w+n;i>w;--i) link(S,i,,);
- for(int i=w;i;--i) link(i,T,,);
- for(int i=;i<=n;++i)
- for(int j=;j<=m;++j){
- scanf("%d",&q);
- for(int k=;k<=n;++k)
- link(i+w,(j-)*n+k,,q*k);
- }
- while(bfs());
- printf("%.2f",tot*1.0/n);
- return ;
- }
P2053 [SCOI2007]修车(费用流)的更多相关文章
- P2053 [SCOI2007]修车 费用流
$ \color{#0066ff}{ 题目描述 }$ 同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的.现在需要安排这M ...
- bzoj 1070: [SCOI2007]修车 费用流
1070: [SCOI2007]修车 Time Limit: 1 Sec Memory Limit: 162 MBSubmit: 2785 Solved: 1110[Submit][Status] ...
- [BZOJ1070][SCOI2007]修车 费用流
1070: [SCOI2007]修车 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 6209 Solved: 2641[Submit][Status] ...
- 【BZOJ1070】[SCOI2007]修车 费用流
[BZOJ1070][SCOI2007]修车 Description 同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的. ...
- [bzoj1070][SCOI2007]修车——费用流
题目大意: 传送门 题解: 本题和(POJ3686)[http://poj.org/problem?id=3686]一题一模一样,而且还是数据缩小以后的弱化版QAQ,<挑战程序设计竞赛>一 ...
- [BZOJ1070] [SCOI2007] 修车 (费用流 & 动态加边)
Description 同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的.现在需要安排这M位技术人员所维修的车及顺序,使 ...
- 【BZOJ 1070】[SCOI2007]修车 费用流
就是拆个点限制一下(两点一排一大片),这道题让我注意到了限制这个重要的词.我们跑网络流跑出来的图都是有一定意义的,一般这个意义就对应了问题的一种方案,一般情况下跑一个不知道对不对的方案是相对容易的我们 ...
- [SCOI2007]修车 费用流
---题面--- 题解: 因为我们并不需要知道准确方案,而人数固定,要使得平均等待时间最小,也就是要使得总的等待时间最小. 因此我们将工人按每个时刻拆点,拆完之后向车子连边,流量为1,费用为k * 维 ...
- [SCOI2007]修车 费用流 BZOJ 1070
题目描述 同一时刻有N位车主带着他们的爱车来到了汽车维修中心.维修中心共有M位技术人员,不同的技术人员对不同的车进行维修所用的时间是不同的.现在需要安排这M位技术人员所维修的车及顺序,使得顾客平均等待 ...
- BZOJ.1070.[SCOI2007]修车(费用流SPFA)
题目链接 /* 神tm看错题*2.. 假如人员i依次维修W1,W2,...,Wn,那么花费的时间是 W1 + W1+W2 + W1+W2+W3... = W1*n + W2*(n-1) + ... + ...
随机推荐
- iOS - UITableView中有两种重用Cell的方法
UITableView中有两种重用Cell的方法: - (id)dequeueReusableCellWithIdentifier:(NSString *)identifier; - (id)dequ ...
- How to write threats to validity?
Paper reference Threats to construct validity are concerned with the relationship between theory and ...
- Git文件常见下标符号说明
Git文件常见下标符号说明 git是一种分布式的版本控制工具. 不用联网也能实现版本控制,很实用. 它是一款现在比较流行的版本控制工具. git的文件上的图标,可以反映出当前文件或者文件夹的状 ...
- arch 将 普通用户添加到 docker 组
如果还没有 docker group 就添加一个: sudo groupadd docker 如果你想用你的使用者帳戶(非root帳戶)來使用Docker,把你的帳戶加到Docker的群組中 sudo ...
- js获取当前日期方法(YYYY-MM-DD格式)
var myDate = new Date(); var time = myDate.toLocaleDateString().split('/').join('-');将1970/08/08转化 ...
- day14 十四、三元运算符,推导式,匿名内置函数
一.三元(目)运算符 1.就是if...else...语法糖 前提:if和else只有一条语句 # 原来的做法 cmd = input('cmd:>>>') if cmd.isdig ...
- PAT甲级1080 Graduate Admission【模拟】
题目:https://pintia.cn/problem-sets/994805342720868352/problems/994805387268571136 题意: 模拟高考志愿录取. 考生根据总 ...
- Codeforces 677 - A/B/C/D/E - (Undone)
链接: A - Vanya and Fence - [水] AC代码: #include<bits/stdc++.h> using namespace std; ; int n,h; in ...
- Gym 101873I - Uberwatch - [DP]
题目链接:http://codeforces.com/gym/101873/problem/I 题意: 给出 $n(1 \le n \le 300000)$ 个单位时间,每个单位时间给出一个 $x_i ...
- React中redux表单编辑
reduxForm中反写数据在输入框中,数据是从别的模块拉取 // 编辑应用表单 class EditCode extends React.Component { constructor(props) ...