最大流 SAP GAP模版

2021-06-21 02:21:49 字數 4329 閱讀 9192

題目:poj-1273最大流模板題

code1:鏈式前向星(1)

#include

#include

#include

#define maxn 205

#define maxm 410

#define int_max 0x7fffffff

using

namespace std;

int n,m;

struct node

edge[maxm];

int cnt,head[maxn];

void

addedge

(int from,

int to,

int c)

//這裡存的還是一條有向邊

int 

gap[

maxn],h

[maxn

],curedges

[maxn

],pre

[maxn

];

int start,end;

int

sap_gap

()

}//增廣成功,尋找瓶頸邊

for(i=start; i!=end; i=edge[curedges[i]].to)

flow_ans+=cur_flow;

u=neck;

}

for(i=curedges[u]; i!=-

1; i=edge[i].next)

if(edge[i

].c&&h

[u]==h

[edge[i

].to]+1

)break

;//尋找可行弧

if(i!=-1)

//找到可行弧

else

//未找到可行弧

}

return flow_ans;

}

void

init

()

}

int

main

()

return0;

}

code2:鏈式前向星(2)
#include

#include

#include

#define

inf 

0x7fffffff

using

namespace

std;

const

intn

=205

;

const

intm

=500

;//邊是雙向存的(注意不是無向)要開正常的2倍大

struct

edge

edge[m

];int

head[n

],cnt,n

,m,s

=1;

int

pre[n],

cur[n],

dis[n],

gap[n];

void

addedge

(intu,

intv

,intw)

//這裡存的還是一條有向邊

int

sap()

aug=

inf;

}

break

;

}

}

if(

flag

)//未找到可行邊

continue

;

intmindis=n

;

for(

intj

=head[u

];j!=-1;j

=edge[j

].next

)

}

if((--

gap[

dis[

u]])==0)

break

;

dis[u]=

mindis+1;

gap[

dis[

u]]++;

u=

pre[u];

}

return

flow

;

}

void

init

()

}

int

main

()

return

0;

}
code3:鄰接矩陣
#include

#include
#include

#define m 205

using

namespace std;

const

int inf=~0u>>1;

int n,nb,nc,m;

int gap[m],flow[m][m],dist[m],cur[m];

int pre[m];

int source,end,s,t;

int

sap()

goto loop;

}

}

int mind=n;

for(

int v=

1;v<=n;v++)

if(flow[u][v]&&(mind>dist[v]))

if((--

gap[

dist[u

]])==0)

break

;

gap[dist[u]=mind+1

]++;

u=pre[u];
}

return maxflow;

}

void

init

()

source=1;

end=n;

}

int

main

()

return0;

}

最大流模版Dinic演算法

網路流的演算法有很多,最基礎的為ek演算法,他的時間複雜度為o n m 2 dinic演算法的時間複雜為o m n 2 dinic演算法是現構造層次圖,然後用阻塞流來增廣。構造層次圖有乙個bfs,增廣是用dfs來寫。詳細的講述請參考 劉汝佳寫的 演算法競賽入門經典訓練指南 大白書 include i...

網路流 最大流 模版 費用流 模版

給出乙個網路圖,以及其源點和匯點,求出其網路最大流。dinic include include include define inf 1e9 using namespace std queue int q int n,m,s,t,cnt,x,y,w,dis 10001 last 200001 str...

poj2516(最小費用最大流模版)

首先就這題而言,各k互不影響,可以分開來算,累加即可 對於構圖來說,以後可以源點s 0,匯點t n m,其中一組點是1 n,另一組n 1 n m,注意可以這樣構圖 對於最小費用最大流,要用spfa來做最短路徑,只需記錄路徑即可 include include include include incl...