建圖重要。
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 容易看出,我們修車的順序...