Cod sursa(job #2204967)

Utilizator sandupetrascoPetrasco Sandu sandupetrasco Data 17 mai 2018 13:34:00
Problema Flux maxim Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.52 kb
#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 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] > 0){
                    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]);
            curr = pred[curr];
        }
        
        curr = y;
        
        while (curr != x){
            C[pred[curr]][curr] -= diff;
            C[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;
}