Cod sursa(job #2697204)

Utilizator Edwuard99Diaconescu Vlad Edwuard99 Data 17 ianuarie 2021 19:45:30
Problema Flux maxim Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.2 kb
#include<stdio.h>

const int inf=1000000;
int n,m,flux,c[1001][1001],t[1001],s[1001];

void citire()
{   int i,x,y,z;
    freopen("maxflow.in","r",stdin);
    scanf("%d%d",&n,&m);
    for(i=1;i<=m;i++)
    {   scanf("%d%d%d",&x,&y,&z);
        c[x][y]=z;
    }
    fclose(stdin);
}

int BF()
{   int p=1,u=1,i;
    s[p]=1;
    while(p<=u)
    {   for(i=1;i<=n;i++)
            if(!t[i]&&c[s[p]][i]&&i!=1)
            {   u++;
                s[u]=i;
                t[i]=s[p];
            }
        p++;
    }
    if(t[n]) return 1;
    else return 0;
}

int main()
{   freopen("maxflow.out","w",stdout);
    int i,fmin,x;
    citire();
    while(BF())
    {   for(i=1;i<=n;i++)
        {   if(t[i]<=0||c[i][n]<=0) continue;
            fmin=c[i][n];
            x=i;
            while(t[x])
            {  if(c[t[x]][x]<fmin) fmin=c[t[x]][x];
                x=t[x];
            }
            x=i;
            flux+=fmin;
            c[i][n]-=fmin;
            c[n][i]+=fmin;
            while(t[x])
            {  c[t[x]][x]-=fmin;
                c[x][t[x]]+=fmin;
                x=t[x];
            }
        }
        for(i=1;i<=n;i++)
            t[i]=0;
    }
    printf("%d",flux);
    fclose(stdout);
    return 0;
}