Cod sursa(job #2959725)

Utilizator yo_andrei_2003Murica Andrei yo_andrei_2003 Data 2 ianuarie 2023 14:53:18
Problema Flux maxim Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.24 kb
#include <fstream>
#include <vector>
#include <queue>

using namespace std;
ifstream cin("maxflow.in");
ofstream cout("maxflow.out");
int n, cost[1002][1002];
vector<int> adiacenta[1002];
vector<int> parinte;
queue<int> q;
bool drum() {
    parinte=vector <int>(n+1,-1);
    parinte[1]=0;
    q.push(1);
    while(!q.empty()) {
        int z=q.front();
        q.pop();
        for (auto x: adiacenta[z]) {
            if (parinte[x]==-1 && cost[z][x]>0) {
                q.push(x);
                parinte[x]=z;
            }
        }
    }
    /*for (int i = 0; i < n; ++i) {
        cout<<parinte[i]<<" ";
    }*/
    //cout<<endl;
    return parinte[n]!=-1;
}
int main() {
    int m, a, b, c,r=0;
    cin>>n>>m;
    drum();
    for (int i = 0; i < m; ++i) {
        cin>>a>>b>>c;
        adiacenta[a].push_back(b);
        adiacenta[b].push_back(a);
        cost[a][b]=c;
    }
    while(drum()) {
        int min=999999999;
        for (int i = n; i != 1; i=parinte[i]) {
            if (min>cost[parinte[i]][i]) {
                min=cost[parinte[i]][i];
            }
        }
        for (int i = n; i != 1; i=parinte[i]) {
            cost[parinte[i]][i]-=min;
            cost[i][parinte[i]]+=min;
        }
        r+=min;
    }
    cout<<r;
    return 0;
}