題意:
有k個牛奶機跟c頭牛。他們之間有路相連,農民想讓每個牛能到其中乙個牛奶機,又想讓走路最遠的牛走得最小。
題解:求最大值最小,不出意外就是二分了
由於要限制總的路徑長度,就不能對每條邊限制了,於是先floyd求最短路,再二分最長路即可~
不連大於二分值的路徑,連小於等於二分值的路徑,做最大流就好了~
view code
1 #include 2 #include 3 #include 4 #include 5 #include 67#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...