不說別的,直接上模板。
dinic+當前弧優化:
structedgee[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+當前弧優化:
structedgee[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...