POJ 1273 Drainage Ditches 一般增广路算法,网络流
2013-04-08 20:25
435 查看
看到Ci最大可以到10 000 000,N<=200,M<=200,我以为用这个算法会超时,据说该算法的复杂度是N*M*C,C为最大流量值。
但是显然没超,可能是数据弱神马的,不知道
没什么思路说的,就是裸的网络最大流,我的代码和上一个题 pigs(麦克卖猪)的代码基本上相同,下面贴代码:
View Code
但是显然没超,可能是数据弱神马的,不知道
没什么思路说的,就是裸的网络最大流,我的代码和上一个题 pigs(麦克卖猪)的代码基本上相同,下面贴代码:
View Code
#include <cstdio> #include <cstring> #define MAXN 205 #define MAXM 205 #define INF 300000000 struct Arc { int c,f; } edge[MAXN][MAXN]; int n,m; void init() { int i; memset(edge,0,sizeof(edge)); for(i =0; i < m; ++i) { int u,v,c; scanf("%d%d%d",&u,&v,&c); edge[u][v].c += c; } } void Ford() { int prev[MAXN]; int alpha[MAXN]; int queue[MAXN]; int i,j; while(1) { int front=0,tail=0; memset(prev,0xff,sizeof(prev)); queue[tail++] = 1; alpha[1] = INF; prev[1] = -2; while(front != tail && prev == -1) { int v = queue[front++]; for(i = 1; i <= n; i++) { int tmp; if(prev[i] == -1 && (tmp = edge[v][i].c-edge[v][i].f)) { prev[i] = v; queue[tail++] = i; alpha[i] = alpha[v] < tmp ? alpha[v]:tmp; } } } if(prev == -1) break; for(i = prev ,j = n; i != -2; j = i, i = prev[i]) { edge[i][j].f += alpha ; edge[j][i].f = -edge[i][j].f; } } int p=0; for(i=1; i<n; i++) p += edge[i] .f; printf("%d\n",p); } int main() { // freopen("in.cpp","r",stdin); while(~scanf("%d%d",&m,&n)) { init(); Ford(); } return 0; }
相关文章推荐
- POJ 1273-Drainage Ditches(网络流_最大流_ISAP()算法和EK()算法)
- 初识网络流(一般增广路算法-Ford-Fulkerson)
- POJ1273 Drainage Ditches【最大流、增广路算法Edmonds_Karp】
- poj-1273-Drainage Ditches-一般预流推进算法-最高标号预流推进算法-sap+gap优化
- 【POJ 1273 Drainage Ditches】& 网络流 & Dinic 算法
- 网络流最经典的入门题 各种网络流算法都能AC。 poj 1273 Drainage Ditches
- 网络流 之 一般增广路算法 标号法实现
- POJ1273 Drainage Ditches(网络流&增广路)
- poj 1273-小白算法练习 Drainage Ditches 网络流
- 网络流 之 一般增广路算法 标号法实现
- POJ 1273 Drainage Ditches 网络流算法 .
- poj 1459 Power Network 网络流初步,增广路算法,主要是建图麻烦
- isap算法模板poj 1273gap+弧优化 最大流
- 【网络流】poj 1273 Drainage Ditches
- 【生活没有希望】poj1273网络流大水题
- POJ 1459 PowerNetwork 多源点网络流入门(EK算法求最大流)
- 网络流-最大流 模板(poj 1273)
- poj 1273 hdu 1532 网络流最大流 Dinic算法
- 网络流之 最短增广路算法模板(SAP)
- POJ 1273 Drainage Ditches(网络流-最大流)