一道二分最大流的裸題
問你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...