[poj] 1273 Drainage Ditches
2017-12-01 13:04
330 查看
原题
网络流板子题,以下为dinic算法。
介于贪心的错误,我们试图用反向边实现退流,这样如果有更优解就可以实现。
bfs处理层数,用于保证最优和判断是否还有增广路;每次dfs找多条增广路;直到没有增广路可以找,即为结束。
#include<cstdio> #include<queue> #include<cstring> #define N 10005 using namespace std; int n,m,src, des, head ,deep ,cur ,ans,cnt; queue <int> q; struct hhh { int to,next,w; }edge[200005]; int read() { int ans=0,fu=1; char j=getchar(); for (;(j<'0' || j>'9') && j!='-';j=getchar()) ; if (j=='-') fu=-1,j=getchar(); for (;j>='0' && j<='9';j=getchar()) ans*=10,ans+=j-'0'; return ans*fu; } void add(int u,int v,int w) { edge[cnt].to=v; edge[cnt].w=w; edge[cnt].next=head[u]; head[u]=cnt++; } void init() { memset(head,0,sizeof(head)); cnt=2; ans=0; } bool bfs() { for (int i=1;i<=n;i++) cur[i]=head[i],deep[i]=-1; q.push(1); deep[1]=1; while(!q.empty()) { int r=q.front(); q.pop(); for (int i=head[r],v;i;i=edge[i].next) { v=edge[i].to; if (edge[i].w>0 && deep[v]==-1) { deep[v]=deep[r]+1; q.push(v); } } } if (deep !=-1) return 1; return 0; } int dfs(int x,int f) { if (x==n) return f; int ha=0,now; for (int &i=cur[x],v;i;i=edge[i].next) { v=edge[i].to; if (edge[i].w>0 && deep[v]>deep[x]) { now=dfs(v,min(f-ha,edge[i].w)); if (now) { ha+=now; edge[i].w-=now; edge[i^1].w+=now; } } if (ha==f) return ha; } return ha; } int main() { while(~scanf("%d%d",&m,&n)) { init(); for (int i=1,a,b,c;i<=m;i++) { a=read(); b=read(); c=read(); add(a,b,c); add(b,a,0); } while (bfs()) ans+=dfs(1,0x3f3f3f3f); printf("%d\n",ans); } return 0; }
相关文章推荐
- POJ 1273 Drainage Ditches(网络流,最大流)
- poj 1273 Drainage Ditches (网络流_EK_入门)
- hdu 1532 poj 1273 Drainage Ditches (ek算法)
- poj 1273
- POJ 1273 Drainage Ditches(最大流模板)
- Poj 1273 Drainage Ditches (最大流EK+ISAP)
- poj 1273 Drainage Ditches(最大费用流+最短增广路径算法)
- poj 1273 Drainage Ditches_最大流模版
- POJ 1273 Drainage Ditches
- poj 1273 Drainage Ditches--最大流--sap
- 网络流之最大流 POJ 1273
- poj1273 Drainage Ditches
- 【POJ 1273】Drainage Ditches(网络流)
- POJ - 1273(最大流模板)
- poj 1273 Drainage Ditches
- poj1273 Drainage Ditches
- poj 1273 Drainage Ditches
- poj1273 Drainage Ditches (最大流模板)
- poj 1273 Drainage Ditches ( 最大流--Edmonds_karp算法)
- POJ 1273