Cod sursa(job #2658015)

Utilizator dragos231456Neghina Dragos dragos231456 Data 12 octombrie 2020 21:49:00
Problema Flux maxim Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 kb
#include <bits/stdc++.h>

using namespace std;

const int N=1005;

ifstream f("maxflow.in");
ofstream g("maxflow.out");

int rez;
int n,m;
int x,y,c,b,k;
int flow[N][N],C[N][N],q[N],seen[N],a[N],last[N];
vector<int>vecini[N];
bool ok=true;


int main()
{
    f>>n>>m;
    for(int i=1;i<=m;++i)
    {
        f>>x>>y>>c;
        vecini[x].push_back(y);
        vecini[y].push_back(x);
        C[x][y]=c;
    }

    while(ok)
    {
        ok=false;
        for(int i=1;i<=n;++i) seen[i]=0, a[i]=0;
        k=1;q[1]=1; b=0; seen[1]=1;
        a[1]=1000000;

        while(b<k && !seen[n])
        {
            x=q[++b];
            for(auto y : vecini[x]) if(!seen[y] && C[x][y]-flow[x][y]>0)
            {
                last[y]=x;
                a[y]=min(a[x],C[x][y]-flow[x][y]);
                q[++k]=y;
                seen[y]=1;
            }
        }

        if(seen[n])
        {
            rez+=a[n];
            ok=true;
            y=n; x=last[n];
            while(y!=1)
            {
                flow[x][y]+=a[n];
                flow[y][x]-=a[n];
                y=x;
                x=last[x];
            }
        }
    }

    g<<rez;
    return 0;
}