Cod sursa(job #2918264)

Utilizator BalasaRaduBalasa Radu BalasaRadu Data 10 august 2022 18:46:27
Problema Flux maxim Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.3 kb
#include <bits/stdc++.h>//Edmonds-Karp
using namespace std;

ifstream fin ("maxflow.in");
ofstream fout("maxflow.out");

const int dim=1009,inf=1e8;

vector<int>adj[dim];

int n,m;
int parent[dim];
int capacity[dim][dim];

int bfs(){
    queue<pair<int,int>>q;
    for(int i=1;i<=n;i++){
        parent[i]=0;
    }
    parent[1]=-1;
    q.push({1,inf});
    while(!q.empty()){
        int x=q.front().first,cur_flow=q.front().second;
        for(int y:adj[x]){
            if(!parent[y]&&capacity[x][y]){
                parent[y]=x;
                int min_flow=min(cur_flow,capacity[x][y]);
                if(y==n){
                    return min_flow;
                }
                q.push({y,min_flow});
            }
        }
        q.pop();
    }
    return 0;
}

signed main(){
        fin>>n>>m;
    for(int i=1;i<=m;i++){
        int x,y,c;
        fin>>x>>y>>c;
        adj[x].push_back(y);
        adj[y].push_back(x);
        capacity[x][y]=c;
    }
    int max_flow=0;
    while(int cur_flow=bfs()){
        max_flow+=cur_flow;
        int cur=n;
        while(cur!=1){
            int prev=parent[cur];
            capacity[prev][cur]-=cur_flow;
            capacity[cur][prev]+=cur_flow;
            cur=prev;
        }
    }
        fout<<max_flow;
}