bzoj1070 修車)(費用流)

2021-08-30 11:39:25 字數 1275 閱讀 6473

建圖重要。

m個工人, n輛車

源點向每輛車連一條容量為1費用為0的邊。

把每個工人拆成n個,第i個工人的第j個節點表示,第i個工人修倒數j輛車。

每輛車向這n*m個工人連一條容量為1費用為這個工人修這輛車的時間*這個工人倒數第幾個修這輛車。

因為修一輛車只會使在它後面修的都+修這輛車的時間。

//我服了,爛費用流板子,一直t,狗了乙個別人的spfa,才過。我就吐槽一句,是誰教我的費用流!?

#include#include#include#includeusing namespace std;

int n, m, shi[15][65], huan, hui,tot;

int tp = 1, dis[100000], vis[100000], tov[100000], tof[100000], tow[100000], h[100000], nex[100000], fa[100000], bian[100000];

double ans;

dequeq;

void read(int &x)

while(c >= '0' && c <= '9')

if(f) x = -x;

}void add(int x,int y,int w,int f)

/*bool spfa()

}} vis[x] = 0;

} return dis[hui] == dis[hui+1] ? 0 : 1; }*/

bool spfa(int s,int e)}}

}if(dis[e] == dis[e+2]) return false;

return true;

}int liu()

u=hui;

while(u!=huan)

return dis[hui];

}int main()

huan = 0;

hui = n + m * n + 1;

for(int i = 1; i <= n; i++)

for(int i = 1; i <= n; i++)

for(int i = 1; i <= m; i++)

for(int j = 1; j <= n; j++)

add(n+(i-1)*n + j, hui,1,0);

while(spfa(huan,hui))

printf("%0.2lf",ans/n);

//cout

}

BZOJ 1070 修車 費用流

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

bzoj1070 修車 最小費用流

time limit 1 sec memory limit 128 mb submit 5655 solved 2383 submit status discuss 同一時刻有n位車主帶著他們的愛車來到了汽車維修中心。維修中心共有m位技術人員,不同的技術人員對不同 的車進行維修所用的時間是不同的。現...

BZOJ 1070 修車 神奇網路流

傳送門 題意 中文題。solution 因為這道題每個工人可以維修多個汽車,所以說沒法直接用費用流,我們先想乙個簡單的貪心思路 假如說我們考慮乙個工人的情況,那麼他修車所需的時間為 t1 t1 t2 t1 t2 t3 t 1 tn 變形一下該式 n t1 n 1 t2 tn 容易看出,我們修車的順序...