Pagini recente » Cod sursa (job #1854350) | Cod sursa (job #311032) | Cod sursa (job #956148) | Cod sursa (job #1527799) | Cod sursa (job #2446168)
#include <bits/stdc++.h>
using namespace std;
ifstream f("maxflow.in");
ofstream g("maxflow.out");
const int NMAX = 1005;
const int inf = 2e9;
int c[NMAX][NMAX],F[NMAX][NMAX];
int n,m;
vector <int> v[NMAX];
int viz[NMAX],tt[NMAX], cd[NMAX];
int BF(){
int i,j,node,V;
cd[0] = cd[1] = 1;
memset(viz, 0, sizeof(viz));
viz[1] = 1;
for(i = 1 ; i <= cd[0] ; i++){
node = cd[i];
if(node == n)
continue;
for(j = 0 ; j < v[node].size() ; j++){
V = v[node][j];
if(c[node][V] == F[node][V] || viz[V])
continue;
viz[V] = 1;
cd[++cd[0]] = V;
tt[V] = node;
}
}
return viz[n];
}
int main(){
int i,j,x,y,z,node,flow = 0,fmin;
f >> n >> m;
for(i = 1 ; i <= m ; i++){
f >> x >> y >> z;
v[x].push_back(y);
v[y].push_back(x);
c[x][y] += z;
}
do{
for(i = 0 ; i < v[n].size() ; i++){
node = v[n][i];
if(F[node][n] == c[node][n] || !viz[node])
continue;
tt[n] = node;
fmin = inf;
for(node = n ; node != 1 ; node = tt[node])
fmin = min(fmin, c[tt[node]][node] - F[tt[node]][node]);
if(fmin == 0)
continue;
for(node = n ; node != 1 ; node = tt[node]){
F[tt[node]][node] += fmin;
F[node][tt[node]] -= fmin;
}
flow += fmin;
}
}while(BF());
g << flow;
return 0;
}