Pagini recente » Rating Rotaru Ioan (Ioannnnnnnnnnn) | Cod sursa (job #1839239) | Cod sursa (job #1277253) | Cod sursa (job #425949) | Cod sursa (job #2204966)
#pragma GCC optimize ("03")
#include <bits/stdc++.h>
#define NMAX 1005
using namespace std;
typedef long long ll;
typedef pair< int , int > PII;
int n, m;
int F[NMAX][NMAX], C[NMAX][NMAX];
vector < int > V[NMAX];
int Flow(int x, int y){
int maxFlow = 0;
while (1){
queue < int > Q;
vector < int > pred(NMAX, 0);
Q.push(x);
while (Q.size()){
int node = Q.front(); Q.pop();
for (auto it : V[node]){
if (pred[it] == 0 && it != x && C[node][it] > F[node][it]){
pred[it] = node;
Q.push(it);
}
}
}
if (pred[y] == 0) return maxFlow;
int diff = 2e9, curr = y;
while (curr != x){
diff = min(diff, C[pred[curr]][curr] - F[pred[curr]][curr]);
curr = pred[curr];
}
curr = y;
while (curr != x){
F[pred[curr]][curr] += diff;
F[curr][pred[curr]] -= diff;
curr = pred[curr];
}
maxFlow += diff;
}
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
ifstream cin("maxflow.in");
ofstream cout("maxflow.out");
cin >> n >> m;
for (int i = 1, x, y, z; i <= m; i++){
cin >> x >> y >> z;
C[x][y] += z;
V[x].push_back(y);
V[y].push_back(x);
}
cout << Flow(1, n) << "\n";
return 0;
}