最大流 Dinic Sap 模板

2022-09-05 04:51:11 字數 1631 閱讀 3277

不說別的,直接上模板。

dinic+當前弧優化:

struct

edgee[m*2

];int

be[n],all;

intd[n],q[n];

int stack[n],top;//

棧存的是邊

int cur[n];//

當前弧優化

void add(int x, int y, int z)//

需保證相反邊第乙個為偶數

bool bfs(int s, int t)//

化為層次圖 使得邊數從m降低為n 複雜度隨之下降

}return0;

}int dinic(int s, int t)//

防止爆棧 用stack模擬遞迴

for(int i=0; i)

ans+=minc;

top=mini;

u=e[stack[mini]].x;

}for(int i=cur[u]; i!=-1; cur[u]=i=e[cur[u]].ne)

if(e[i].c>0 && d[e[i].y]==d[e[i].x]+1) break

;

if(cur[u]!=-1

)

else}}

return

ans;

}

isap+gap+當前弧優化:

struct

edgee[m*2

];int

x,y,z,n,m,s,t;

intbe[n],all;

intd[n],q[n];

int stack[n];//

模擬遞迴

int gap[n],cur[n];//

gap優化+當前弧優化

void add(int x, int y, int z)//

保證第乙個為偶數

void bfs(int s, int

t) }

}int sap(int s, int t, int

n)

for(int i=0; i)

ans+=minc;

top=mini;

u=e[stack[mini]].x;

continue

; }

for(int i=cur[u]; i!=-1; cur[u]=i=e[i].ne)//

當前弧優化

if(e[i].c>0 && d[e[i].y]+1==d[u]) break

;

if(cur[u]!=-1

)

else

gap[d[u]]--;

if(!gap[d[u]]) return ans;//

gap表示當前距離的點有多少個 一旦==0 說明斷層直接退出迴圈

d[u]=mind+1

; gap[d[u]]++;

if(u!=s) u=e[stack[--top]].x;}}

return

ans;

}void

init()

模板 網路最大流 最大流

給出乙個網路圖,以及其源點和匯點,求出其網路最大流。in put role presentation inp utin put4 5 4 3 4 2 30 4 3 20 2 3 20 2 1 30 1 3 40ou tput role presentation out puto utpu t50最大...

模板 網路最大流 最大流

給出乙個網路圖,以及其源點和匯點,求出其網路最大流。in put role presentation inp utin put4 5 4 3 4 2 30 4 3 20 2 3 20 2 1 30 1 3 40ou tput role presentation out puto utpu t50最大...

最大流模板

2015年1月30日更新 include include include include include include include include include include include include typedef unsigned int uint typedef long lo...