最大流模板(1次)

 


1
struct edge 2 { 3 int to,cap,rev; 4 }; 5 6 vector<edge>G[maxn]; 7 bool used[maxn]; 8 void add_edge(int from,int to,int cap) 9 { 10 G[from].push_back((edge){to,cap,G[to].size()}); 11 G[to].push_back((edge){from,0,G[from].size()-1}); 12 } 13 int dfs(int v,int t,int f) 14 { 15 if(v==t) 16 return f; 17 used[v]=true; 18 for(int i=0;i<G[v].size();i++) 19 { 20 edge &e=G[v][i]; 21 if(!used[e.to]&&e.cap>0) 22 { 23 int d=dfs(e.to,t,min(f,e.cap)); 24 if(d>0) 25 { 26 e.cap-=d; 27 G[e.to][e.rev].cap+=d; 28 return d; 29 } 30 } 31 } 32 return 0; 33 } 34 int max_flow(int s,int t) 35 { 36 int flow=0; 37 for(;;) 38 { 39 memset(used,0,sizeof(used)); 40 int f=dfs(s,t,INF); 41 if(f==0) 42 return flow; 43 flow+=f; 44 } 45 46 }

这个模板求最大流只能用一次,因为在求最大流的同时,每条边的容量都改变了。

原文地址:https://www.cnblogs.com/tsw123/p/4398498.html