同一時刻有n位車主帶著他們的愛車來到了汽車維修中心。維修中心共有m位技術人員,不同的技術人員對不同
的車進行維修所用的時間是不同的。現在需要安排這m位技術人員所維修的車及順序,使得顧客平均等待的時間最
小。 說明:顧客的等待時間是指從他把車送至維修中心到維修完畢所用的時間。
第一行有兩個m,n,表示技術人員數與顧客數。 接下來n行,每行m個整數。第i+1行第j個數表示第j位技術人
員維修第i輛車需要用的時間t。
最小平均等待時間,答案精確到小數點後2位。
2 23 2
1 41.50
資料範圍: (2<=m<=9,1<=n<=60), (1<=t<=1000)
將m個工作人員拆成n個點
拆後的m員工的第k個裂點連某輛車,表示該車是倒數第k個被修的車
因為是倒數第k,所以費用自然要加上後面排隊的車的費用
算是一種逆向思維吧
md n和m搞反了……找錯找了半天qwq
1 #include2 #include3 #include4 #include5 #include6#define maxn (50000+10)
7#define maxm (5000000+10)
8using
namespace
std;
9 queueq;
10bool
visit[maxn];
11int
pre[maxn];
12int n,m,k,s,e=4999
,ans,fee;
13int
num_edge;
14int
head[maxn];
15int
dis[maxn];
16bool
used[maxn];
17int
inf;
18int t[1000][1000
];19
struct
node
20 edge[maxm*2
];26
27void add(int u,int v,int l,int
c)28
3536
bool spfa(int s,int
e)3757}
58 used[x]=false;59
}60return (dis[e]!=inf);61}
6263
int mcmf(int s,int
e)64
76 ans+=d;
77 fee+=d*dis[e];78}
79return
fee;80}
8182
intmain()
8394
for (int i=1;i<=n;++i)
9599
for (int i=1;i<=n;++i)
100for (int j=1;j<=m;++j)
101for (int k=1;k<=n;++k)
102106
double ans=mcmf(s,e);
107 printf("
%.2lf\n
",ans/n);
108 }
bzoj1070 SCOI2007 修車(費用流)
同一時刻有n位車主帶著他們的愛車來到了汽車維修中心。維修中心共有m位技術人員,不同的技術人員對不同的車進行維修所用的時間是不同的。現在需要安排這m位技術人員所維修的車及順序,使得顧客平均等待的時間最小。說明 顧客的等待時間是指從他把車送至維修中心到維修完畢所用的時間。輸入格式 第一行有兩個數m,n,...
SCOI2007 修車(費用流)
好像大家似乎都在籌備退役滾粗文化課的後事了,我是不是也應該準備了?不過我不想退役啊55555 很好,這個記性 魚,zkw板子還是背不熟,我 這道題看似很狗,不過只要我們能想到將乙個工人對於每輛車拆成n份來看的話就會簡便許多,這樣的話,等待時間就被我們具體化了,不再是抽象的,因此把n輛車和m n個工人...
bzoj1070 修車)(費用流)
建圖重要。m個工人,n輛車 源點向每輛車連一條容量為1費用為0的邊。把每個工人拆成n個,第i個工人的第j個節點表示,第i個工人修倒數j輛車。每輛車向這n m個工人連一條容量為1費用為這個工人修這輛車的時間 這個工人倒數第幾個修這輛車。因為修一輛車只會使在它後面修的都 修這輛車的時間。我服了,爛費用流...