poj1273最大流dinc
2014-07-27 15:44
435 查看
bfs 构建层次图,dfs 寻找增广路。dfs在寻找增广路的同时自我调整直到此时的层次图无增广路时 重新构图,直到无增广路为止。
对于添加反弧,觉得对于每点 进流量和 出流量应该守恒,反向弧的添加方便自我调整,而通过每点的流量没变,最后导致流到终点的流量不变。
对于添加反弧,觉得对于每点 进流量和 出流量应该守恒,反向弧的添加方便自我调整,而通过每点的流量没变,最后导致流到终点的流量不变。
#include <cstdio> #include <cstring> #include <algorithm> #include <climits> #include <string> #include <iostream> #include <map> #include <cstdlib> #include <list> #include <set> #include <queue> #include <stack> using namespace std; const int maxn= 222; const int INF=0xfffffff; int Min(int a,int b) { return a>b?b:a; } int Map[maxn][maxn]; int n;int m; int l[maxn]; int s;int e; bool bfs() { queue<int > q; q.push(s); memset(l,0,sizeof(l)); l[s]=1; while(!q.empty()){ int cur=q.front(); q.pop(); for(int i=1;i<=m;i++){ if(!l[i]&&Map[cur][i]){ l[i]=l[cur]+1; q.push(i); } } } return l[e]; } int dfs(int x,int val) { int tem=val; if(x==e) return val; for(int i=1;i<=m&&tem;i++){ if(l[i]==l[x]+1&&Map[x][i]){ int t=dfs(i,Min(Map[x][i],tem)); Map[x][i]-=t;Map[i][x]+=t; tem-=t; } } return val-tem; } int solve() { int ans=0;int t; while(bfs()){ while(t= dfs(1,INF)){ ans+=t; } } return ans; } int main() { while(cin>>n>>m){ int a;int b;int c; memset(Map,0,sizeof(Map)); for(int i=0;i<n;i++){ cin>>a>>b>>c; Map[a][b]+=c; } s=1;e=m; cout<<solve()<<endl; } return 0; }
相关文章推荐
- POJ 1273 Drainage Ditches 最大流
- 【poj 1273】Drainage Ditches (最大流裸题)
- POJ 1273 && HDU 1532 Drainage Ditches(最大流-Dinic)
- POJ 1273 Drainage Ditches(最大流)
- 网络流-最大流 模板(poj 1273)
- poj 1273 最大流入门
- POJ 1273 Drainage Ditches 最大流
- POJ 1273 最大流 Dinic
- (最大流-简单题) poj 1273 Drainage Ditches
- [ACM] POJ 1273 Drainage Ditches (最大流)
- poj1273(网络流最大流dinic)
- poj 1273 Drainage Ditches(最大费用流+最短增广路径算法)
- poj 1273 Drainage Ditches(最大流)
- HDOJ---1532||POJ---1273 Drainage Ditches[最大流-模版]
- poj 1273 Drainage Ditches (网络流 最大流)
- poj 1273 & hdu 1532 Drainage Ditches(最大流 )EK,dinic模板
- poj 1273 最大流 基础题 (内有最详细的最大流分析,很好入门)
- poj 1273 最大流(三种方法)
- poj 1273Drainage Ditches 最大流
- 经典的最大流 POJ 1273