網洛流
可解決圖論中多重貢獻與不完全貢獻的問題。
Dinic
注意事項:
1.建反邊
bk[u].push_back(V[v].size());
bk[v].push_back(V[u].size());
2.dis,now陣列清空
memset(dis, 0, sizeof(dis));
memset(now, 0, sizeof(now));
3.dis[S]賦值為1不為0
if(!dis[v] && flw[u][i])
如果賦值為0這會出大問題
4.1次bfs應跑完dinic
while(bfs()){
while(f = dinic(S, INF))
res += f;
}
最佳化:
if(u == T || !flow){return flow;}
2.當前弧最佳化與判斷res
for(int i = now[u], v; i < V[u].size() && res; i++)
if(!k) dis[v] = 0;
關於輸出最大流方案:
圖中bfs+dinic後的所有dis大於0的點。
對於淨值的計算,即最大割,對於每個點計算min(入度權值和,出度權值和)。