problem:a
time limit:3000ms
memory limit:65536k
在這個資訊化的時代,網購成為了最流行的購物方式,比起在大街上,頂著烈日尋找需要的商品,大多數人更願意坐在家裡,點選下滑鼠,來找到喜歡的商品,並完成購物。儘管網購還有很多安全問題,但是接受網購的人還是越來越多。網購的輕鬆,使得許多人淡忘了貨物配送的煩惱。其實貨物配送才是網購最重要的環節,貨物送不到,一切都免談。貨物的配送還耗費了大量的資金,很多時候,一件商品被買下了,那麼它可能要經過多城市,才能送達目的地。pira作為配送商品的管理人員,他希望在滿足所有貨物能送達目的地的條件下,使得每次完成兩個城市間的配送所花費的運費的最大值最小,也就是使得所走的路線中,費用最大的那條邊的值最小ps:老闆看到最大的一次花費太大的話,你就等著被fire吧t_t
多組資料輸入.每組輸入第一行有兩個整數n和m,n表示有n個城市,m表示有m條路線,所有貨物都是從1號城市配送的(1<=n<=10000,1<=m<=100000)
第二行有n個數,表示編號為1~n的城市,所購的物品個數,所有物品數的和小於10000000
接下來m行,每行有四個數u,v,cost和cap,表示從城市u到城市v配送一件物品需花費cost,最多可配送cap件物品,注意所有邊都是單向的(1<=u,v<=n,0< cost< 10000000,0<=cap< 100000)
每組輸出每次完成城市間運輸的最小花費,即最小的邊權限制,如果不能完成貨物的配送,則輸出-1。
3 30 0 2
1 2 2 1
2 3 1 1
1 3 3 1
3 30 0 1
1 2 2 1
2 3 5 1
1 3 4 1
34
並不是求花費的總和
pira
題意中文就不解釋了。。
既然讓求最大的花費,那麼我們可以來假設最大花費是x,那麼所有的邊的花費都會小於等於x,且同時整個圖可以跑滿流。現在我們不知道x是多少,所以我們可以選擇用二分來求x。
#include #include #include #include#include#include#include#includeusing namespace std;
typedef long long ll;
const int oo=1e9;
/**oo 表示無窮大*/
const int mm=200000;
const int mn=10010;
int node,src,dest,edge;
/**node 表示節點數,src 表示源點,dest 表示匯點,edge 統計邊數*/
int ver[mm],flow[mm],nex[mm];
int head[mn],work[mn],dis[mn],q[mn];
void prepare(int _node, int _src,int _dest)
void addedge( int u, int v, int c)
bool dinic_bfs()
return 0;
}int dinic_dfs( int u, int exp)
return 0;
}int dinic_flow()
{ int i,ret=0,delta;
while(dinic_bfs())
{for(i=0; i
poj 2112 最大流 二分
題意 有k臺擠奶機,c頭奶牛,給出這k c個實體間的距離,求出每頭奶牛都到一台擠奶機去,怎麼分配使奶牛走的最大距離最小。用二分列舉最大距離,include include define n 500 define inf 0x3fffffff int map n n dis n gap n head ...
hdu 3228 最大流 二分
題意 一共有n個城市,一些城市裡有金礦,一些城市裡有倉庫,金礦和倉庫都有乙個容量,有m條邊,每條邊是雙向的,有乙個權值,求將所有金礦裡的儲量都運送到倉庫中,所需要經過的道路中,使最大的權值最小 思路 增設乙個超級源點和乙個超級匯點,源點與每乙個城市相連,容量為 數量,匯點與倉庫相連,容量為倉庫的容量...
poj 2391 二分 最大流
思路 求最短時間,可以想到二分,然後判斷可行性。首先在原圖上求 floyd,得到每兩個棚之間的最短距離。然後拆點 將每個棚拆為 i 和 i 流進和流出 添邊 i,i inf 增加源點 s 和匯點 t,從 s 連邊到 i,容量為該棚現在的貓的數量,i 連邊到 t,容量為該棚的容量。若棚 i 和棚 j ...