Pagini recente » Cod sursa (job #1140561) | Cod sursa (job #3240890) | Cod sursa (job #814642) | Cod sursa (job #2093198) | Cod sursa (job #1127754)
#include<cstdio>
#include<vector>
#include<iostream>
#include<cstring>
using namespace std;
#define MAX 1001
#define pb push_back
int N , M , C[MAX][MAX] , F[MAX][MAX] , t[MAX] , fmin, maxflow , L[MAX];
bool u[MAX];
vector<int> G[MAX];
void read();
void solve();
bool BFS();
void write();
int main()
{
read();
solve();
write();
return 0;
}
void read()
{
int x , y , c;
freopen("maxflow.in" , "r" , stdin );
scanf("%d%d" , &N , &M );
for(int i = 1 ; i<= M ; ++i )
{
scanf("%d%d%d" , &x , &y , &c);
G[x].pb(y);
G[y].pb(x);
C[x][y] = c;
}
}
void solve()
{
while(BFS())
{
for(int i = 0 ; i < (int)G[N].size() ; ++i )
{
if(C[G[N][i]][N] > F[G[N][i]][N])
t[N] = G[N][i];
fmin = C[t[N]][N]-F[t[N]][N];
for(int nod = N;nod!=1;nod = t[nod])
fmin = min(fmin,C[t[nod]][nod] - F[t[nod]][nod]);
for(int nod = N;nod != 1 ; nod = t[nod])
{
F[t[nod]][nod] += fmin;
F[nod][t[nod]] -= fmin;
}
maxflow+=fmin;
}
}
}
bool BFS()
{
int r;
memset(u,0,sizeof(u));
r = L[1] = 1;
u[1] = 1;
for(int i = 1 ; i<= r ; ++i )
{
if(L[i] == N)continue;
for(int j = 0 ; j < (int)G[L[i]].size() ; ++j)
{
int w = G[L[i]][j];
if(!u[w] && F[L[i]][w] < C[L[i]][w])
{
L[++r] = w;
t[w] = L[i];
u[w] = 1;
}
}
}
return u[N];
}
void write()
{
freopen("maxflow.out" , "w" , stdout );
printf("%d" , maxflow);
}