poj2112 二分 floyd 多源多匯最大流

2022-05-04 10:18:10 字數 1098 閱讀 5641

/*此題不錯,大致題意:c頭牛去k個機器處喝奶,每個喝奶處最多容納m頭牛,求所有牛中走的最長路的

那頭牛,使該最長路最小。思路:最大最小問題,第一靈感:二分答案check之。對於使最長路最短,

用folyd算出所有牛到每個喝奶點的最短路,每次列舉最大值,取不大於該值的路,重新構圖;把所有牛趕去

喝奶點,在喝奶點有限制,不是多源多匯嗎?!取超級源點,限制為1(一頭牛),超級匯點,限制為

m,即可。其他路限制隨意。

關鍵點:分清哪些是流量,最短路只是構圖的乙個方式(條件)。此題注意編號(原圖1--k是目標,後面是

牛(起點)。)

#include//140ms, 1a

#include#include#includeusing namespace std;

int k,c,m;const int inf =0x3f3f3f3f;

int a[250][250]; int minmax;

int e[20000][3];int head[250]; //鏈式前向星二維陣列表示法,0:to,1:pre,2:wight;

void folyd() //最短路不用說

}}void build(int limit) //由限制,選小於之的路,重新構圖

for(int i=1;i<=c;i++) //超級源點

for(int i=1;i<=k;i++) //其他點

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

if(a[i][j]<=limit)

}int level[250];int vis[250];

bool bfs() //bfs+dfs,dinic演算法}}

return vis[k+c+1];

}int dfs(int uu,int minf)

else

left=mid;

}if(check(right-1)) //最後二分時判斷特殊情況

printf("%d\n",right-1);

else

printf("%d\n",right);

}

poj2112 最大流 floyd 二分

題意 給一堆點,一部分是牛,一部分是機器,每頭牛必須要走到乙個機器,每個點之間有距離,要求每頭牛都能找得到一台機器 機器有最大容量 的情況下,走的最遠的牛距離最小 題解 二分答案,小於該距離的邊才能加進來,先用floyd預處理距離,然後跑最大流看滿不滿足條件 include include incl...

poj2112 網路流 二分 floyd

描述 fj已將他的k 1 k 30 擠奶機搬到c 1 c 200 奶牛的奶牛牧場。一組不同長度的路徑在奶牛和擠奶機之間執行。擠奶機位置由id號1.k命名 奶牛位置由id號k 1.k c命名。每個擠奶點每天可以 處理 最多m 1 m 15 的奶牛。編寫乙個程式,找到每頭牛到一些擠奶機的任務,以便最遠行...

poj 2112 最大流 二分

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