Pagini recente » Cod sursa (job #565267) | Cod sursa (job #1132459) | Cod sursa (job #793182) | Cod sursa (job #443202) | Cod sursa (job #255504)
Cod sursa(job #255504)
#include <fstream>
#include <iostream>
#include <cstring>
#include <queue>
using namespace std;
#ifdef __ACASA__
#define MAXN 11
#else
#define MAXN 1001
#endif
int C[MAXN][MAXN];
int F[MAXN][MAXN];
int T[MAXN];
int N, M, flux, r, i;
int BF() {
queue<int> Q;
Q.push(1);
T[1] = -1;
memset( T, 0, sizeof(T) );
while ( !Q.empty() ) {
int x = Q.front();
for ( int i=1; i<=N; ++i )
if ( C[x][i]>F[x][i] && T[i]==0 ) {
Q.push(i); T[i] = x;
if ( i==N ) return 1;
}
Q.pop();
}
return 0;
}
int main() {
// load
ifstream in("maxflow.in");
in >> N >> M;
while ( M-- ) {
int x, y, c;
in >> x >> y >> c;
C[x][y] = c;
}
//flow
for ( flux=0; BF(); flux+=r ) {
for ( r=0x3f3f3f, i=N; i!=1; i=T[i] )
r = r>(C[T[i]][i]-F[T[i]][i]) ? C[T[i]][i]-F[T[i]][i] : r;
for ( i=N; i!=1; i=T[i] )
F[T[i]][i] += r, F[i][T[i]] -= r;
}
// output
ofstream("maxflow.out") << flux << "\n";
return 0;
}