poj2455 二分最大流裸題

2021-08-05 23:39:42 字數 1167 閱讀 1677

一道二分最大流的裸題

問你john要從1號去n號點t次(到了n號點直接瞬間移動回1號點,就是直接把他放回1號點,且之前走的邊不能再走了),問在這t次中走的最長的一條邊最小是多少(注意:不是從1號到n號的總距離的最大值 而是某條邊的最大值)

二分距離 如果某條邊的流量<=mid 則加入這條邊  最後求最大流 如果最大流》=t  則距離還有減小的餘地 否則增大

#include#include#include#include#include#include#include#include#include#include#include#includetypedef long long ll;

using namespace std;

const int maxn=20010;//jiedian de zui da zhi

const int maxm=800010;//bian de zui da zhi

const int inf=0x3f3f3f3f;

struct node

edge[maxm];

int tol;

int head[maxn];

int dep[maxn];

int gap[maxn];

int bian[40005][3];

int n,p,t;

void init() //remember write it in main function

void addedge(int u,int v,int w)

void bfs(int start,int end)

}}int sap(int start,int end,int n) //n shi jiedian de zui da ge shu ,including source and sink

for(i=0;idep[edge[i].to])

}--gap[dep[u]];

dep[u]=min+1;

++gap[dep[u]];

if(u!=start)u=edge[s[--top]].from;}}

return res;

}void getmap(int mid)

else

}printf("%d\n",l);

}return 0;

}

poj 2455 二分 最大流

思路 求1 n的路徑中最長段的最小值,顯然要用到二分,我們二分最長段,如果當前u,v的距離小於等於limit,則連邊 雙向邊 邊容量為1,代表只能走1次。然後就是以1為源點,n為匯點跑最大流,如果maxflow t,則在 low,mid 中搜尋,否則就在 mid,high 中搜尋。1 include...

poj 2455 二分 最大流

思路 求1 n的路徑中最長段的最小值,顯然要用到二分,我們二分最長段,如果當前u,v的距離小於等於limit,則連邊 雙向邊 邊容量為1,代表只能走1次。然後就是以1為源點,n為匯點跑最大流,如果maxflow t,則在 low,mid 中搜尋,否則就在 mid,high 中搜尋。1 include...

poj 2455(二分加網路流(dinic))

處理重邊,想不出什麼好的方法。只好用了前向星來寫鄰接表儲存。不是很難不多說什麼了。include include include includeusing namespace std const int maxm 80005 const int inf int max define cc m,v m...