Cod sursa(job #3350497)

Utilizator mtcmtcmtc mtc mtcmtc Data 8 aprilie 2026 19:48:00
Problema Flux maxim Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.32 kb
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream cin("maxflow.in");
ofstream cout("maxflow.out");
vector<int>adj[1005];
int c[1005][1005];
int f[1005][1005];
int p[1005];
int n;
int bfs(){
    for(int i=1;i<=n;i++){
        p[i]=-1;
    }
    queue<int>q;
    q.push(1);
    p[1]=0;
    while(!q.empty()){
        int x=q.front();
        q.pop();
        for(auto y:adj[x]){
            int s=c[x][y]-f[x][y];
            if(s>0&&p[y]==-1){
                p[y]=x;
                q.push(y);
                if(y==n) return 1;
            }
        }
    }
    return 0;
}
int main()
{
    int m;
    cin>>n>>m;
    for(int i=1;i<=m;i++){
        int x,y,z;
        cin>>x>>y>>z;
        adj[x].push_back(y);
        adj[y].push_back(x);
        c[x][y]=z;
    }
    while(bfs()){
        int nod=p[n];
        int ant=n;
        int flow=1e9;
        while(nod>0){
            flow=min(flow,c[nod][ant]-f[nod][ant]);
            ant=nod;
            nod=p[nod];
        }
        nod=p[n];
        ant=n;
        while(nod>0){
            f[nod][ant]+=flow;
            f[ant][nod]-=flow;
            ant=nod;
            nod=p[nod];
        }
    }
    int mx=0;
    for(auto e:adj[1]){
        mx+=f[1][e];
    }
    cout<<mx;
    return 0;
}