bzoj1070 SCOI2007 修車(費用流)

2022-03-01 14:17:54 字數 2005 閱讀 7333

同一時刻有n位車主帶著他們的愛車來到了汽車維修中心。維修中心共有m位技術人員,不同的技術人員對不同的車進行維修所用的時間是不同的。現在需要安排這m位技術人員所維修的車及順序,使得顧客平均等待的時間最小。

說明:顧客的等待時間是指從他把車送至維修中心到維修完畢所用的時間。

輸入格式:

第一行有兩個數m,n,表示技術人員數與顧客數。

接下來n行,每行m個整數。第i+1行第j個數表示第j位技術人員維修第i輛車需要用的時間t。

輸出格式:

最小平均等待時間,答案精確到小數點後2位。

輸入樣例#1: 複製

2 2

3 21 4

輸出樣例#1: 複製

1.50

(2<=m<=9,1<=n<=60), (1<=t<=1000)

題解

這篇還是寫得詳細一點好了……因為不是很懂……

我們考慮一下,如果乙個工人修車的序列為$w_1,w_2,w_3...w_n$

那麼對於這幾輛車的車主而言,他們等待的總時間是$\sum _^n w_i*(n-i+1)=nw_1+(n-1)w_2+...+w_n$(因為乙個人在越前面修,會使後面更多的人要等待他的車修好)

然後因為平均時間最少,人數是不變的,所以得保證總時間最少

我們發現,如果把第$i$個人的車讓第$j$個人在倒數第$k$個修(以下表示為$(i,j,k)$),那麼對總時間的貢獻是$t(i,j)*k$,其中$t(i,j)$表示第$j$個人修第$i$輛車的時間

然後因為每一輛車只能被乙個人修,每乙個人同一時間只能修一輛車

那麼我們可以把$(j,k)$表示成乙個狀態,表示被第$j$個人在倒數第$k$個修,那麼不難發現每乙個狀態只能被匹配一次,即不可能有兩輛車同時被乙個人在同乙個順序修

那麼我們可以建乙個二分圖,左邊是$n$輛車,右邊是$n*m$個狀態$(j,k)$(因為$k$不可能超過$n$),然後左邊的每乙個點向右邊所有點連邊,容量為$1$,費用為對應的$(i,j,k)$

然後因為每一輛車只會被修一次,所以從源點向所有車連容$1$費$0$的邊

因為每乙個人在同一時間只能修一輛車,所以右邊所有狀態向匯點連容$1$費$0$的邊

當網路跑滿的時候說明所有車都有人修了,然後又要時間最少,只要在此基礎上求乙個最小費用流即可

1

//minamoto

2 #include3 #include4 #include5 #include6

#define inf 0x3f3f3f3f

7#define id(i,j) (i-1)*n+j

8using

namespace

std;

9#define getc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?eof:*p1++)

10char buf[1

<<21],*p1=buf,*p2=buf;

11 inline int

read()

21const

int n=1005,m=100005;22

int ver[m],next[m],head[n],edge[m],flow[m],tot=1;23

intvis[n],dis[n],disf[n],pre[n],last[n],n,m,s,t;

24 queueq;

25 inline void add(int u,int v,int f,int

e)29

bool

spfa()42}

43}44return ~pre[t];45}

46int

dinic()54}

55return

mincost;56}

57int

main()70}

71 printf("

%.2lf

",(double)dinic()/n);

72return0;

73 }

1070 SCOI2007 修車 費用流

同一時刻有n位車主帶著他們的愛車來到了汽車維修中心。維修中心共有m位技術人員,不同的技術人員對不同 的車進行維修所用的時間是不同的。現在需要安排這m位技術人員所維修的車及順序,使得顧客平均等待的時間最 小。說明 顧客的等待時間是指從他把車送至維修中心到維修完畢所用的時間。第一行有兩個m,n,表示技術...

bzoj1070 修車)(費用流)

建圖重要。m個工人,n輛車 源點向每輛車連一條容量為1費用為0的邊。把每個工人拆成n個,第i個工人的第j個節點表示,第i個工人修倒數j輛車。每輛車向這n m個工人連一條容量為1費用為這個工人修這輛車的時間 這個工人倒數第幾個修這輛車。因為修一輛車只會使在它後面修的都 修這輛車的時間。我服了,爛費用流...

BZOJ 1070 修車 費用流

同一時刻有n位車主帶著他們的愛車來到了汽車維修中心。維修中心共有m位技術人員,不同的技術人員對不同 的車進行維修所用的時間是不同的。現在需要安排這m位技術人員所維修的車及順序,使得顧客平均等待的時間最 小。說明 顧客的等待時間是指從他把車送至維修中心到維修完畢所用的時間。第一行有兩個m,n,表示技術...