POJ1273 HDU1532 最大流模板彙總

2021-08-25 02:21:31 字數 1856 閱讀 4155

poj1273/hdu1532算是最大流的模板題了。

最大流的演算法有很多,我彙總了ek演算法、sap演算法(鄰接矩陣、鄰接表)的模板,記錄下來方便以後使用。但是這個原理emmmmm...我是真不清楚qaq...

1.ek演算法:(不常用)

#include #include #include #include #include using namespace std;

const int msize = 205;

const int inf=0x3f3f3f3f;

int n,m;

int a[msize][msize];

int pre[msize];

bool vis[msize];

bool bfs(int s,int t)}}

return false;

}int ek(int s, int t)

maxflow+=d;

}return maxflow;

}int main()

cout<2.sap演算法(鄰接矩陣):

#include#include#include#include#include#includeusing namespace std;

const int inf=0x3f3f3f3f;

const int max=202;

int n,m;

int a[max][max];//存圖

int pre[max];//記錄當前點的前驅

int dis[max];//記錄距離標號

int gap[max];//gap常數優化

int sap(int st,int en)

u=st;}}

else

}return maxflow;

}int main()

printf("%d\n",sap(1,n));

}return 0;

}

3.sap演算法(鄰接表):

#include#include#include#include#include#includeusing namespace std;

const int inf=0x3f3f3f3f;

const int max=202;

int n,m;

struct edge

edge[max*max];

int tot,head[max];

int gap[max],dep[max],pre[max],cur[max];

void init()

void add(int u,int v,int w)

int sap(int st,int en,int n)

u=st;

maxflow+=mindis;

continue;

}bool flag=false;

int v;

for(int i=cur[u];i!=-1;i=edge[i].next)

}if(flag)

else

gap[dep[u]]--;

if(gap[dep[u]]==0)

break;

dep[u]=mindis+1;

gap[dep[u]]++;

if(u!=st)

u=edge[pre[u]^1].to;}}

return maxflow;

}int main()

printf("%d\n",sap(1,n,n));

}return 0;

}

最大流模板題 HDU 1532

hdu 1532 題意 給你m條邊 但向邊 n個點,n個點的編號為1到n,問從1到n的最大流是多少。最大流模板題,聽說有重邊,但是沒管重邊這個事也過了。dinic演算法 include define mem a,b memset a b,sizeof a define de coutvoid add...

p1273最大流(模板)

先是自己寫的,過不了,不知道有哪些特殊案例想不出來,當模板的記下咯 main.cpp p1273 created by mr.xue on 17 4 12.年 八月末更新 忘了最大流問題重新看了下模板,也找到了自己的 的問題,就是初始化沒做好,新的可以過 include include includ...

hdu 1532最大流 增廣路

include include include includeusing namespace std define max 210 int flow max max int pre max mark max int n,m,f int q,z void maxliu if mark n 如果mark...