最小费用流模板(Bellman-Ford算法找最短路)
2017-11-03 12:46
393 查看
模板来自 《挑战程序设计竞赛》
poj 3068
poj 3068
#include <stdio.h> #include <string.h> #include <vector> #include <algorithm> using namespace std; struct edge { int to,cap,cost,rev; edge(int _to = 0, int _cap = 0, int _cost = 0, int _rev = 0) :to(_to),cap(_cap),cost(_cost),rev(_rev){} }; const int INF = 0x3f3f3f3f; const int MAX_V = 2222; int V; vector<edge> G[MAX_V]; int dist[MAX_V]; int prevv[MAX_V],preve[MAX_V]; void add_edge(int from, int to, int cap, int cost) { G[from].push_back(edge(to,cap,cost,G[to].size())); G[to].push_back(edge(from,0,-cost,G[from].size()-1)); } int min_cost_flow(int s, int t, int f) { int res = 0; while(f > 0) { memset(dist,0x3f,sizeof(dist)); dist[s] = 0; bool update = true; while(update) { update = false; for(int v = 0; v < V; ++v) { if(dist[v] == INF) continue; for(int i = 0; i < G[v].size(); ++i) { edge& e = G[v][i]; if(e.cap > 0 && dist[e.to] > dist[v] + e.cost) { dist[e.to] = dist[v] + e.cost; prevv[e.to] = v; preve[e.to] = i; update = true; } } } } if(dist[t] == INF) return -1; int d = f; for(int v = t; v != s; v = prevv[v]) d = min(d,G[prevv[v]][preve[v]].cap); f -= d; res += d*dist[t]; for(int v = t; v != s; v = prevv[v]) { edge& e = G[prevv[v]][preve[v]]; e.cap -= d; G[v][e.rev].cap += d; } } return res; } int main() { int n,m,u,v,cost,cnt = 0; while(scanf("%d %d",&n,&m) && n+m) { V = n; ++cnt; for(int i = 0; i <= n; ++i) G[i].clear(); for(int i = 0; i < m; ++i) { scanf("%d %d %d",&u,&v,&cost); add_edge(u,v,1,cost); } int res = min_cost_flow(0,n-1,2); printf("Instance #%d: ",cnt); if(res == -1) printf("Not possible\n"); else printf("%d\n",res); } return 0; }
相关文章推荐
- 单源最短路 bellman_ford算法(模板)
- C--最短路(Bellman-Ford算法)
- [单源最短路]Bellman-Ford算法
- 最小费用流bellman-ford算法总结
- 最短路 - bellman-ford 算法模板
- poj1860 【最短路&&bellman_ford算法】
- usaco Sweet Butter(迪杰斯特拉(优先队列优化),bellman_ford算法模板)
- 最短路-Bellman-Ford算法
- 蓝桥杯 算法训练 最短路 (Bellman-Ford算法)
- 最短路 bellman-ford算法
- Wormholes( POJ 3259)(Bellman-Ford+SPFA)(判断是否有负权环)(最短路模板)
- 最短路的Bellman-Ford算法 【判断有无负权环】
- HDOJ 2544 最短路(Bellman-Ford 模板题)
- 最短路之bellman-ford算法
- hdu 2544 最短路 (Bellman_Ford算法)
- 求最短路之Bellman-Ford算法
- 最短路——Bellman-ford算法
- 单源最短路之bellman-ford算法(解决有负权存在的情况)
- ACM模板 Bellman_Ford,单源最短路,图论
- poj 3259 Wormholes(最短路Bellman-Ford算法)