模板 最小費用 最大流

2022-04-07 21:54:17 字數 1999 閱讀 4007

p3376 【模板】網路最大流

一、\(edmonds-karp\)演算法

不斷在殘量網路\(dfs\)進行增廣,當不能進行增廣時,即為最大流。

code:

#include #include #include #include using namespace std;

const int n = 1e4 + 5, m = 2e5 + 5;

int n, m, s, t, pre[m], vis[n];

int cnt = 1, head[n], to[m], nxt[m], val[m];

void add(int u, int v, int w)

bool bfs()

} return false;

}int ek()

ans += up;

} return ans;

}int main()

cout << ek() << endl;

return 0;

}

常數巨大,我會告訴你我的\(ek\)跑了544ms嗎?

二、\(dinc\)演算法

在殘量網路上\(bfs\)構建分層圖,再從分層圖上\(dfs\)不斷增廣。

code:

#include #include #include #include using namespace std;

const int n = 1e4 + 5, m = 2e5 + 5, inf = 2e9;

int n, m, s, t, flow, dep[n];

int cnt = 1, head[n], to[m], nxt[m], val[m];

void add(int u, int v, int w)

bool bfs()

} return dep[t] > 0;

}int dfs(int x, int flow)

return up;

}int dinic()

int main()

cout << dinic() << endl;

return 0;

}

其實我的\(dinic\)常數更大,它跑了467ms。

不過,在加入當前弧優化和快讀後,它跑了\(148ms\).(只加當前弧優化時跑\(287ms\))

當前弧優化:加速跳過列舉不必要的邊。

注意在每次\(bfs\)前對\(cur\)重新賦值。

核心code:

bool bfs() 

} return dep[t] > 0;

}int dfs(int x, int flow)

return up;

}

p3381 【模板】最小費用最大流

最小費用流

將\(bfs\)改為\(spfa\)跑最小費用即可。

code:

#include #include #include #include using namespace std;

const int n = 1e4 + 5, m = 2e5 + 5;

int n, m, s, t, ans, res, pre[m], vis[n], dis[n];

int cnt = 1, head[n], to[m], nxt[m], val[m], cost[m];

void add(int u, int v, int w, int c)

bool spfa()

} }return dis[t] != 0x3f3f3f3f;

}void ek()

res += up * dis[t];

ans += up;

} }int main()

ek();

cout << ans << " " << res << endl;

return 0;

}

最小費用最大流模板

const int n 1010 點 const int m 2 10010 邊 const int inf 1000000000 struct nodee m int next1 m point n dis n q n pre n ne ne為已新增的邊數,next,point為鄰接表,dis為花...

最小費用最大流模板

一 最小費用最大流的模型 在保證流量最大的前提下,所需的費用最小,這就是最小費用最大流問題 帶有費用的網路流圖 g v,e,c,w v 頂點 e 弧 c 弧的容量 w 單位流量費用。任意的弧對應非負的容量c i,j 和單位流量費用w i,j 滿足 流量f是g的最大流。在f是g的最大流的前提下,流的費...

最小費用最大流 模板

因為含有負權邊,所以使用spfa進行增廣。指定流量的最小費用流可以初始化乙個f,然後每次一直迴圈到f 0為止。函式返回的是最大流,當然經過少量修改可以返回最小費用,利用最小流量乘以相應的費用即可。prevv記錄父節點,preve記錄當前節點對應父節點的第幾條邊。const int inf 0x3ff...