最小費用流 用SPFA實現

2021-09-20 21:47:04 字數 751 閱讀 2430

/*

(1)找到一條從源點到達匯點的「距離最短」的路徑,「距離」使用該路徑上的邊的單位費用之和來衡量。

(2)然後找出這條路徑上的邊的容量的最小值f,則當前最大流max_flow擴充f,同時當前最小費用min_cost擴充 f*min_dist(s,t)。

(3)將這條路徑上的每條正向邊的容量都減少f,每條反向邊的容量都增加f。

(4)重複(1)--(3)直到無法找到從源點到達匯點的路徑。

*/#define inf 0x3f3f3f3f;

const int n=1005;

struct edge;

int v;

vectorvec[n];

int dis[n],vis[n];

int prev[n],pree[n];

void add_edge(int from,int to,int cap,int cost));

vec[to].push_back((edge));

}bool spfa(int s,int t)

} }if(prev[t]==-1) return false;

return true;

}int min_cost_flow(int s,int t)

flow+=f;

cost+=dis[t]*f;

for(int v=t;v!=s;v=prev[v])

} return cost;

}

最小費用最大流(SPFA版本)

1 include 2 include 3 include 4 include 5 6using namespace std 78 define ll long long 9 define pb push back 10 define fi first 11 define se second 121...

模板 SPFA增廣 最小費用最大流

簡單的用spfa增廣進行費用流的求解 與ek求最大流類似,只是此時要求最大流的同時費用最小 所以用spfa增廣,就可以費用盡量小 模板 include include include using namespace std const int maxn 705,maxe 144005,inf 0x3...

最小費用流模板(zkw與spfa)

實踐中,上面的這個演算法非常奇怪.在某一些圖上,演算法速度非常快,另一些圖上卻比純 spfa 增廣的演算法慢.不少同學經過實測總結的結果是稠密圖上比較快,稀疏圖上比較慢,但也不盡然.這裡我從理論上分析一下,究竟這個演算法用於哪些圖可以得到理想的效果.先分析演算法的增廣流程.和 spfa 直接演算法相...