1070 SCOI2007 修車 費用流

2022-09-14 16:27:15 字數 1650 閱讀 1245

同一時刻有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費用為這個工人修這輛車的時間 這個工人倒數第幾個修這輛車。因為修一輛車只會使在它後面修的都 修這輛車的時間。我服了,爛費用流...