Cod sursa(job #2959756)

Utilizator yo_andrei_2003Murica Andrei yo_andrei_2003 Data 2 ianuarie 2023 17:00:31
Problema Flux maxim Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.18 kb
#include <fstream>
#include <vector>
#include <queue>

using namespace std;
ifstream cin("maxflow.in");
ofstream cout("maxflow.out");
int n, cost[1012][1012];
int mini=999999999;
vector<int> adiacenta[1012];
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) {
                if (mini>cost[z][x]) {
                    mini=cost[z][x];
                }
                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()) {
        for (int i = n; i != 1; i=parinte[i]) {
            cost[parinte[i]][i]-=mini;
            cost[i][parinte[i]]+=mini;
        }
        r+=mini;
    }
    cout<<r;
    return 0;
}