nefu500(二分,最大流)

2022-09-04 04:33:09 字數 1785 閱讀 5686

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 3

0 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

3

4

並不是求花費的總和

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 ...