進行spfa每次對殘餘網路求最短路,記錄前驅,然後跑這條增廣路,更新答案,直到源點和匯點不連通位置
我們可以類似dinic,在spfa求完每個點到源點的距離之後,再像dinic一樣進行增廣,這樣就能多路增廣,並且還可以加當前弧優化。
#include using namespace std;const int maxn = 5e3 + 5;
const int inf = 0x3f3f3f3f;
int n, m;
struct edge
};edge *head[maxn];
void addedge(int u, int v, int w, int c)
namespace zkw}}
}return dis[t] < inf;
}int dfs(int u, int flow)
int used = 0; vis[u] = true;
for (edge *e = head[u]; e; e = e->next)
if (used == flow) break;}}
return used;
}void work() }}
}int main()
zkw :: work();
cout << zkw :: res << ' ' << zkw :: ans << endl;
return 0;
}
費用流演算法 ZKW
連續研究了幾天的費用流,乙個屬於自己版本的zkw費用流出爐了。zkw神牛發明的zkw演算法可以說是編寫簡單,速度也非常不錯。個人還給zkw加了乙個當前弧優化,km演算法中的鬆弛變數優化與連續增廣優化,不過加了這些優化後zkw的全部過程也只有30行。感覺上zkw就是優化了spfa求最短路的過程,因為s...
餐巾計畫問題 網路流24題 費用流 zkw
乙個餐廳在相繼的 nn 天裡,每天需用的餐巾數不盡相同。假設第 ii 天需要 r iri 塊餐巾 i 1,2,n 餐廳可以購買新的餐巾,每塊餐巾的費用為 pp 分 或者把舊餐巾送到快洗部,洗一塊需 m 天,其費用為 f 分 或者送到慢洗部,洗一塊需 nn 天 n mn m 其費用為 ss 分 ss ...
網路流 費用流
這個好像不考 沒事可以騙分 費用流,顧名思義,就是有費用的流,也就是說,給乙個網路流圖中的每條弧增加乙個單位流量費用。一般來說求解的費用流都是最大流最小費用。好像沒什麼好bb的 這裡推薦使用zkw演算法求解最小費用流,看著 理解就行,應該還是很好理解的。zkw演算法在稠密圖上跑得飛快,在稀疏圖上還不...