poj2112 最大流 floyd 二分

2022-03-15 23:36:52 字數 1575 閱讀 8125

題意:給一堆點,一部分是牛,一部分是機器,每頭牛必須要走到乙個機器,每個點之間有距離,要求每頭牛都能找得到一台機器(機器有最大容量)的情況下,走的最遠的牛距離最小

題解:二分答案,小於該距離的邊才能加進來,先用floyd預處理距離,然後跑最大流看滿不滿足條件

#include#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define fi first

#define se second

#define mp make_pair

#define pb push_back

#define pii pair#define c 0.5772156649

#define pi acos(-1.0)

#define ll long long

#define mod 1000000007

#define ls l,m,rt<<1

#define rs m+1,r,rt<<1|1

using

namespace

std;

const

double g=10.0,eps=1e-12

;const

int n=400+10,maxn=100000+10,inf=0x3f3f3f3f

;struct

edgee[maxn

<<2

];int

cnt,head[n];

intdis[n];

intd[n][n];

void add(int u,int v,int

c)bool bfs(int s,int

t) }

}return0;

}int dfs(int x,int mx,int

t) }

if(!flow)dis[x]=-2

;

return

flow;

}int maxflow(int s,int

t)

return

ans;

}void

init()

intn,m,k;

bool ok(int x,int s,int

t)int

main()

}for(int i=1;i<=n+m;i++)

for(int j=1;j<= n+m;j++)

for(int k=1;k<=n+m;k++)

d[j][k]=min(d[j][k],d[j][i]+d[i][k]);

/*for(int i=1+n;i<=n+m;i++)

printf(

"%d\n

",r);

}return0;

}/********************

*******************

*/

view code

POJ 2112 最大流 最短路

poj 2112 最大流 最短路 題意 給定k個 器和c頭奶牛,每個 器每天最多擠m頭奶牛 器和奶牛稱為 實物 再給每個實物之間的距離。問擠完所有奶牛,奶牛所需走最短的距離。分析 用floyd求出 實物 之間的最短距離,求最大流,二分找最短距離。include include include usi...

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頭牛每頭...