您的位置:首页 > 理论基础 > 计算机网络

poj 3549 基本网络流

2011-08-08 09:58 190 查看
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <deque>
#include <algorithm>

using namespace std;

int cap[1000][1000];
int flow[1000][1000];
int a[1000];
int f;
int p[1000];

const int inf = 0x7fffffff;

void Edmonds_karp(int N, int M  )
{

deque<int>q;
int t, u, v, x;
memset(flow, 0, sizeof(flow));
memset(p, 0, sizeof(p));
f = 0;
for (; ; )
{
memset(a, 0, sizeof(a));
a[1] = inf;
q.push_back(1);
while (!q.empty( ))
{
u = q.front( );
q.pop_front( );
for( v = 1;  v <= M;  v++)
if (!a[v] && cap[u][v] > flow[u][v])
{
p[v] = u;
q.push_back(v);
a[v] = min(a[u], cap[u][v] - flow[u][v]);
}
}
if (a[M] == 0 )
break;
for ( u = M; u != 1; u = p[u])
{
flow[u][p[u]] -= a[M];
flow[p[u]][u] += a[M];

}
f += a[M];
}
}

int main( )
{
int N, M, i, j, a, b, c;

while (scanf("%d%d", &N, &M ) != EOF ) {
memset(cap, 0, sizeof(cap));
f = 0;
for (i = 0; i < N; i++) {
scanf("%d%d%d", &a, &b, &c);
cap[a][b] += c;
}
Edmonds_karp(1, M);
printf("%d\n",f);
}
return  0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: