【最大流模板】
来源:互联网 发布:中国网络在线教育 编辑:程序博客网 时间:2024/05/16 04:58
一、FF算法
1.先调用init()初始化,用add(from,to,cap)建边。然后max_flow(s,t)最大流,s为源点,t为汇点。2.N是点数,n是点数,m是边数。3.cap容量,跑完最大流后cap为零即为割边。const int N=500;const int INF=0x3f3f3f3f;struct edge{ int to,cap, rev; edge(int x=0,int y=0,int z=0) { to=x;cap=y;rev=z; }};vector<edge> g[N];bool used[N];int n,m,s,t;void add(int from,int to,int cap){ g[from].push_back(edge(to,cap,g[to].size())); g[to].push_back(edge(from,0,g[from].size()-1));}int dfs(int v,int t,int f){ if(v==t)return f; used[v]=true; for(int i=0;i<g[v].size();i++) { edge &e=g[v][i]; if(used[e.to]||e.cap<=0)continue; int d=dfs(e.to,t,min(e.cap,f)); if(d>0) { e.cap-=d; g[e.to][e.rev].cap+=d; return d; } } return 0;}int max_flow(int s,int t){ int flow=0; while(1) { memset(used,0,sizeof(used)); int f=dfs(s,t,INF); if(f==0)return flow; flow+=f; }}void init(){ for(int i=1;i<=n;i++) g[i].clear();}
二、Dinic算法(理论O(m*n^2))
1.先调用init()初始化,用add(from,to,cap)建边。然后max_flow(s,t)求最大流,s为源点,t为汇点。2.N是点数,n是实际点数,m是实际边数。3.cap为容量,cap为0表示割边。const int N=1000;const int INF=0x3f3f3f3f;struct edge{ int to,cap,rev; edge(int x,int y,int z) { to=x;cap=y;rev=z; }};vector<edge> g[N];int level[N],iter[N];int n,m,s,t;bool vis[N];void add(int from,int to,int cap){ g[from].push_back(edge(to,cap,g[to].size())); g[to].push_back(edge(from,0,g[from].size()-1));}void bfs(int s){ memset(level,-1,sizeof(level)); level[s]=0; queue<int> que; que.push(s); while(!que.empty()) { int v=que.front();que.pop(); for(int i=0;i<g[v].size();i++) { edge &e=g[v][i]; if(e.cap>0&&level[e.to]<0) { level[e.to]=level[v]+1; que.push(e.to); } } }}int dfs(int v,int t,int f){ if(v==t)return f; for(int &i=iter[v];i<g[v].size();i++) { edge &e=g[v][i]; if(e.cap>0&&level[e.to]>level[v]) { int d=dfs(e.to,t,min(f,e.cap)); if(d>0) { e.cap-=d; g[e.to][e.rev].cap+=d; return d; } } } return 0;}int max_flow(int s,int t){ int flow=0; while(1) { bfs(s); if(level[t]<0)return flow; memset(iter,0,sizeof(iter)); int f; while(f=dfs(s,t,INF)) { flow+=f; } }}void init(){ for(int i=1;i<=n;i++)g[i].clear();}
阅读全文
0 0
- 最大流算法模板
- 最大流算法模板
- 最大流模板
- 最大流模板
- 最大流ISAP模板
- 最大流模板
- 最大流模板
- 最大流模板
- 最大流模板
- 最大流模板
- 最大流模板
- 最大流模板
- 最大流dinic模板
- 最大流Dinic模板
- 最大流 ISAP 模板
- 最大流dinci模板
- 最大网络流 模板
- 最大流模板
- 2018秋招 搜狐 回文数组
- 鸡汤篇
- redis的学习以及常用命令
- 基本类型变量和引用类型变量的实参和形参
- Spring事务管理
- 【最大流模板】
- hdu6215 Brute Force Sorting 链表模拟
- SSH与SSM学习之hibernate15——SQL原生查询
- C++随笔--类的定义问题
- NYOJ 13
- hdu 6215 Brute Force Sorting 模拟链表
- ViBe提取视频前景目标
- 代理模式
- android Button 的监听类