POJ 2112 二分 最大流

2022-05-24 04:06:11 字數 1282 閱讀 5871

題意:

有k個牛奶機跟c頭牛。他們之間有路相連,農民想讓每個牛能到其中乙個牛奶機,又想讓走路最遠的牛走得最小。

題解:求最大值最小,不出意外就是二分了

由於要限制總的路徑長度,就不能對每條邊限制了,於是先floyd求最短路,再二分最長路即可~

不連大於二分值的路徑,連小於等於二分值的路徑,做最大流就好了~

view code

1 #include 2 #include 3 #include 4 #include 5 #include 6

7#define n 250

8#define m 600000

9#define inf 100000

1011

using

namespace

std;

1213

int map[n][n],m,c,k,l,r,s,t,head[n],next[m],to[m],len[m],q[m<<4

],cnt,layer[n],mid,dis[n],num;

1415 inline void add(int u,int v,int

w)16

2021

void

read()

2230

for(int p=1;p<=k+c;p++)//

floyd處理最短路

31for(int i=1;i<=k+c;i++)

32for(int j=1;j<=k+c;j++)

33if(map[i][p]inf)

34 map[i][j]=min(map[i][p]+map[p][j],map[i][j]);35}

3637

void

create()

3848

49bool

bfs()

5063}64

return layer[t]!=-1;65

}6667int find(int u,int

cur_flow)

6877

if(!result) layer[u]=-1;78

return

result;79}

8081

intdinic()

8288

89void

go()

9099 printf("

%d\n

",l);

100}

101102

intmain()

103

poj 2112 最大流 二分

題意 有k臺擠奶機,c頭奶牛,給出這k c個實體間的距離,求出每頭奶牛都到一台擠奶機去,怎麼分配使奶牛走的最大距離最小。用二分列舉最大距離,include include define n 500 define inf 0x3fffffff int map n n dis n gap n head ...

poj2112 二分最大流

題目 輸入k c m 代表有k臺機器 c頭牛 每台機器最多服務m頭牛 k臺機器編號為1 k。c頭牛編號為k 1 k c 下面是乙個 k c k c 的矩陣 map i j 代表從編號為i的實體到編號為j的實體的直接距離 問你要讓每頭牛都被機器服務 這c頭牛中 走的最遠距離的最小值 就是說這c頭牛每頭...

poj2112二分 最大流

跟上題一樣,因為一開始那份模板用的少,總懷疑那份sap模板出錯了,今天換了乙個模板做另外一題很像的題。先前的模板不能處理過大的數 事實證明我過程中處理錯了,好吧,先放著,校賽完在來找錯了。最後在錯誤在建圖的過程中,嚴格建圖過程,因為增加了牛與牛和機器與機器的距離,導致求最大流結果時出錯。includ...