處理重邊,想不出什麼好的方法。。只好用了前向星來寫鄰接表儲存。。。。不是很難不多說什麼了。。。。
#include#include#include#includeusing namespace std;
const int maxm = 80005;
const int inf = int_max;
#define cc(m,v) memset(m,v,sizeof(m))
struct node edge[maxm];
int head[maxm], p = 0, lev[maxm], val[maxm], cur[maxm];
int que[maxm];
inline void init1()
inline void addedge(int u, int v, int f)
bool bfs(int s, int t) }}
return lev[t];
}int dinic(int s, int t)
for (j = cur[u]; cur[u] != -1; j = cur[u] = edge[cur[u]].next)
if (edge[j].f > 0 && lev[u] + 1 == lev[edge[j].v]) break;
if (cur[u] != -1) else }}
return flow;
}int main()
while (lef <= rig)
if (dinic(1, ni) >= ti) rig = mid - 1;
else lef = mid + 1;
}printf("%d\n", lef);
}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 網路流最大值最小值
問題 點1 到點n之間 找出t條不重用trail 的path,並且求出這些path中,最長的trail長度的最小值.思路 題目中提示,兩個點之間存在多條trail 將每條trail 儲存.並記錄有所trail中的最大值,作為上界.二分查詢,構圖,將trail長度 mid的邊 構造雙向的容量為1的邊....