网络流--最大流dinic模板
2015-04-24 19:24
316 查看
标准的大白书式模板,除了变量名并不一样……在主函数中只需要用到 init 函数、add 函数以及 mf 函数
#include<stdio.h> //差不多要加这么些头文件 #include<string.h> #include<queue> #include<vector> #include<algorithm> using namespace std; const int maxm=150+5; //点的总数 const int INF=0x3f3f3f3f; struct edge{ //弧的结构体,变量:弧的出发点、结束点、容量、流量 int from,to,c,f; edge(int a,int b,int m,int n):from(a),to(b),c(m),f(n){} }; struct dinic{ int m,s,t; //边数、源点标号、汇点标号 vector<edge>e; //边 vector<int>g[maxm]; //g[i][j]表示第i个点出发的第j条边在e中的编号 bool vis[maxm]; int d[maxm],cur[maxm]; //d为源点到点的距离,cur为当前遍历到的边 void init(int n){ //初始化,n为点数量(标号0~n-1) for(int i=0;i<n+5;i++)g[i].clear(); e.clear(); } void add(int a,int b,int v){ //加入弧和反向弧 e.push_back(edge(a,b,v,0)); //正向弧容量v,反向弧容量0 e.push_back(edge(b,a,0,0)); m=e.size(); g[a].push_back(m-2); g[b].push_back(m-1); } bool bfs(){ memset(vis,0,sizeof(vis)); queue<int>q; q.push(s); d[s]=0; vis[s]=1; while(!q.empty()){ int u=q.front();q.pop(); for(int i=0;i<g[u].size();i++){ edge tmp=e[g[u][i]]; if(!vis[tmp.to]&&tmp.c>tmp.f){ vis[tmp.to]=1; d[tmp.to]=d[u]+1; q.push(tmp.to); } } } return vis[t]; } int dfs(int x,int a){ if(x==t||a==0)return a; int flow=0,f; for(int& i=cur[x];i<g[x].size();i++){ edge &tmp=e[g[x][i]]; if(d[x]+1==d[tmp.to]&&(f=dfs(tmp.to,min(a,tmp.c-tmp.f)))>0){ tmp.f+=f; e[g[x][i]^1].f-=f; flow+=f; a-=f; if(a==0)break; } } if(!flow)d[x]=-1; return flow; } int mf(int s,int t){ //在主函数中使用的函数,求s到t的最大流 this->s=s; this->t=t; int flow=0; while(bfs()){ memset(cur,0,sizeof(cur)); flow+=dfs(s,INF); } return flow; } };
相关文章推荐
- 网络流(最大流+模板)
- poj1273(网络流最大流dinic)
- Dining POJ - 3281 EK网络流模板/最大流/拆点
- 最大流dinic 模板
- poj1149(网络流最大流dinic)
- 网络流模板:最大流ISAP算法和Dinic算法
- POJ1273-Drainage Ditches-网络流-最大流(模板题)
- 【最大流-ISAP】POJ-1273-网络流模板!!
- 网络流最大流sap算法模板
- POJ 1273 网络流(最大流)模板
- 网络流模板:最大流ISAP算法和Dinic算法
- 网络流最大流EdmondKarp、SAP【模板】
- 网络流-最大流 模板(poj 1273)
- (模板)网络流最大流,dinic算法
- 【最大流Dinic模板】HDU1532&POJ1273-Drainage Ditches(16/3/6更正)
- poj 1149 PIGS (网络流最大流Dinic)
- 网络流模板 最大流maxflow
- 网络流入门 最大流,带下界,最小费用,EK算法,Dinic算法 模板
- 网络流模板(最大流,最小费)
- ACM网络流模板 最大流ISAP URAL1774