一開始以為是費用流。。半天搞不出
經過學弟講解才知道是這麼個問題
先用floyd求出任意兩個事物間的最短距離,題目要求在所有牛都能找到機器的前提下,最長距離最小(其實看到這樣的字眼就應該想到二分),我們可以二分答案
對於每乙個答案建圖跑網路流,只建容量小於mid的邊,看看是否所有的牛都能找到機器就好
不知道為何用sap模板老是tle - -||明明感覺比dinic要快啊..
#include"cstdio
"#include
"queue
"#include
"cmath
"#include
"stack
"#include
"iostream
"#include
"algorithm
"#include
"cstring
"#include
"queue
"#include
"map
"#include
"set
"#include
"vector
"#define ll long long
#define mems(a,b) memset(a,b,sizeof(a))
using
namespace
std;
const
int maxn = 350
;const
int maxe = 20050
;const
int inf = 0x3f3f3f3f
;struct
node
node(
int a,int b,int c,int
d):s(a),e(b),next(c),val(d){}
}edge[maxe];
inttot,src,des,m,k,c;
intfirst[maxn],dep[maxn],gap[maxn];
intmat[maxn][maxn];
void
init()
void addedge(int u,int v,int
w)bool bfs(int src,int
des)
}return dep[des]!=-1;}
int dfs(int s,int t,int
flow)
return
newflow;
}bool dinic(int s,int t,int
c)
return sum==c;
}void build(int
maxv)
void floyd(int
n)int
main()
floyd(k+c);
src=0
; des=k+c+1
;
int low=0,high=inf,mid;
int ans=inf;
while(low<=high)
else low=mid+1
; }
cout
}return0;
}
poj2112 網路流 二分 floyd
描述 fj已將他的k 1 k 30 擠奶機搬到c 1 c 200 奶牛的奶牛牧場。一組不同長度的路徑在奶牛和擠奶機之間執行。擠奶機位置由id號1.k命名 奶牛位置由id號k 1.k c命名。每個擠奶點每天可以 處理 最多m 1 m 15 的奶牛。編寫乙個程式,找到每頭牛到一些擠奶機的任務,以便最遠行...
poj2112 最大流 floyd 二分
題意 給一堆點,一部分是牛,一部分是機器,每頭牛必須要走到乙個機器,每個點之間有距離,要求每頭牛都能找得到一台機器 機器有最大容量 的情況下,走的最遠的牛距離最小 題解 二分答案,小於該距離的邊才能加進來,先用floyd預處理距離,然後跑最大流看滿不滿足條件 include include incl...
poj2112 二分 floyd 多源多匯最大流
此題不錯,大致題意 c頭牛去k個機器處喝奶,每個喝奶處最多容納m頭牛,求所有牛中走的最長路的 那頭牛,使該最長路最小。思路 最大最小問題,第一靈感 二分答案check之。對於使最長路最短,用folyd算出所有牛到每個喝奶點的最短路,每次列舉最大值,取不大於該值的路,重新構圖 把所有牛趕去 喝奶點,在...