最大流模板

2021-06-27 11:37:56 字數 1788 閱讀 5815

<2023年1月30日更新》

#include #include #include #include #include #include #include #include #include #include #include #include typedef unsigned int uint;

typedef long long int ll;

typedef unsigned long long int ull;

typedef double db;

#define dbg printf("*")

using namespace std;

const int inf=(1<<28)-1;

const ll linf=((ll)1<<52)-1;

struct edge

pool[100000];

edge*et=pool;

edge*eds[200];

void addedge(int i,int j,ll c)

#define foreach_edge(i,j) for(edge*i=eds[j];i!=null;i=i->nxt)

int n;

int st,ed;

int dep[200];

ll dfs(int x,ll mi)

if(res<=0) dep[x]=-1;

return res;

}int qh,qt;

int q[400];

ll dinic()

qh++;

} if(dep[ed]==-1) break;

res=max((ll)0,res);

res+=dfs(st,linf); }

return res;

}//blocks define

#define st(i) (i)

#define ed(i) ((i)+ntot)

int ntot,m;

int main()

return 0;

}

ac vijos p1590

把整個程式copy過來了....

現在打乙個dinic已經沒有什麼問題了....

構圖方面還是比較坑

...

然後是類似於dinic的最小費用流.多路增廣.存圖同上,這裡省略了.

int n;

int st,ed;

int dist[205];

int cost_add;

bool used[205];

int dfs(int x,int mi)

used[x]=false;

if(res<=0) dist[x]=inf;

return res;

}int q[1000000];

int qt,qh;

int dinic()

}qh++;

} if(dist[ed]==inf) break;

cost_add=0;

dfs(st,inf);

res+=cost_add; }

return res;

}

注意dfs中使用了used在深搜的時候避免搜到環(最短路圖中可能存在0環).

以後寫最大流/最小費用最大流就果斷背模板了...

反正最大流的題目重不在演算法,重在建模.....

而且dinic又好理解又好寫(相對於sap而言)

模板 網路最大流 最大流

給出乙個網路圖,以及其源點和匯點,求出其網路最大流。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最大...

最大流模板

include define mem a,b memset a,b,sizeof a define for a,b,c for int a b a c a using namespace std typedef long long ll const int maxn 1000005 const in...