pku1273 Drainage Ditches
2011-07-29 20:16
176 查看
题目链接:pku1273 hdu1532
方法:最大流 EK算法
思想:本地为典型的最大流题目,只需要注意的是有些时候从一处到另一处不只有一条排水沟。
因此是c[a-1][b-1]+=d; 而不是直接赋值。
代码:
方法:最大流 EK算法
思想:本地为典型的最大流题目,只需要注意的是有些时候从一处到另一处不只有一条排水沟。
因此是c[a-1][b-1]+=d; 而不是直接赋值。
代码:
//pku1273 hdu1532 #include<string.h> #define VMAX 201 #define INF 0x7ffffff int n, m; //分别表示图的边数和顶点数 int c[VMAX][VMAX]; //容量 int Edmonds_Karp( int s, int t ) //输入源点和汇点 { int p,q,queue[VMAX],u,v,pre[VMAX],flow= 0,aug; while(true) { memset(pre,-1,sizeof(pre)); //记录父节点 for( queue[p=q=0]=s; p<=q; p++ ) //广度优先搜索 { u= queue[p]; for( v=0; v<m&&pre[t]<0; v++ ) if( c[u][v]>0 && pre[v]<0 ) pre[v]=u, queue[++q]=v; if( pre[t]>=0 ) break; } if( pre[t]<0 ) break; //不存在增广路 aug= INF; //记录最小残留容量 for( u=pre[v=t]; v!=s; v=u,u=pre[u] ) if(c[u][v]<aug) aug=c[u][v]; for( u=pre[v=t]; v!=s; v=u,u=pre[u] ) c[u][v]-=aug, c[v][u]+=aug; flow+= aug; } return flow; } #include<stdio.h> int main() { while(scanf("%d%d",&n,&m)!=-1) { int a,b,d; memset(c,0,sizeof(c)); for(int i=0;i<n;i++) { scanf("%d%d%d",&a,&b,&d); c[a-1][b-1]+=d; } printf("%d\n",Edmonds_Karp(0,m-1)); } return 0; }
相关文章推荐
- hdu1532 & pku1273 Drainage Ditches 网络流(最大流EK算法)
- PKU1273 Drainage Ditches
- 网络流入门----pku1273
- pku 1273 Drainage Ditches 最大流入门基础题
- PKU 1273 Drainage Ditches
- PKU-1273 Drainage Ditches (网络最大流)
- pku1273 Drainage Ditches
- PKU 1273 Drainage Ditches
- pku 1273 Drainage Ditches( Edmond-Karp最大流模板)
- 最大流问题 pku 1273 Drainage Ditches
- 最大流裸题——pku1273
- pku 1273
- pku 1273_Drainage Ditches 最大流问题
- pku1815 割边
- pku1068
- Counterfeit Dollar 1013 pku
- pku 1003
- 聪明的打字员 -- ACM PKU 1184 解题报告
- pku3128Leonardo's Notebook(置换群的幂运算) ???
- pku2492 并查集