POJ 2112 floyd 網路流 二分

2022-07-19 17:39:18 字數 1631 閱讀 4241

一開始以為是費用流。。半天搞不出

經過學弟講解才知道是這麼個問題

先用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算出所有牛到每個喝奶點的最短路,每次列舉最大值,取不大於該值的路,重新構圖 把所有牛趕去 喝奶點,在...