Cod sursa(job #2959951)

Utilizator Nicolae11Mihaila Nicolae Nicolae11 Data 3 ianuarie 2023 11:34:10
Problema Flux maxim Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.89 kb
/*
    Ideea de rezolvare a algoritmului este urmatoarea:
    Folosim algoritmul de Max Flow. Gata.

Complexitate:
Timp: O()
Memorie: O()
*/
#include <bits/stdc++.h>
using namespace std;
ifstream f("maxflow.in");
ofstream g("maxflow.out");
int n,m,s,t;
int viz[1005];
int parinte[1005];
int graf[1005][1005];
long long flux_maxim;
void AddMuchie(int x, int y, int c)
{
    graf[x][y]=c;
}
bool bfs()
{
    memset(viz,0,sizeof(viz));
    memset(parinte,0,sizeof(parinte));
    queue <int> q;
    viz[1]=1;
    q.push(1);
    while(!q.empty())
    {
        int act=q.front();
        q.pop();
        if(act==t)
            return true;
        for(int i=1;i<=n;i++)
            if(viz[i]==0 && graf[act][i]>0)
            {
                viz[i]=1;
                parinte[i]=act;
                q.push(i);
            }
    }
    return false;
}
int maxFlow()
{
    while(bfs())
    {
        for(int i=1;i<n;i++)
        {   if(viz[i]!=0 && graf[i][t]>0)
            {
                int aux_flux=1<<30;
                parinte[t]=i;
                int j=t;
                while(parinte[j]!=0)
                {
                    aux_flux=min(aux_flux,graf[parinte[j]][j]);
                    j=parinte[j];
                }
                if(aux_flux!=0)
                {
                    int j=t;
                    while(parinte[j]!=0)
                    {
                        graf[parinte[j]][j]-=aux_flux;
                        graf[j][parinte[j]]+=aux_flux;
                        j=parinte[j];
                    }
                    flux_maxim=flux_maxim+aux_flux;
                }
            }
        }
    }
    return flux_maxim;
}
int main()
{
    f>>n>>m;
    s=1;
    t=n;
    int x,y,c;
    for(int i=1;i<=m;i++)
    {
        f>>x>>y>>c;
        AddMuchie(x,y,c);
    }
    g<<maxFlow();
    return 0;
}