Cod sursa(job #2579572)

Utilizator denisaaabBucur Denisa Andreea denisaaab Data 12 martie 2020 16:58:55
Problema Flux maxim Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.49 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#define inf 0x3f3f3f3f
using namespace std;
ifstream f("maxflow.in");
ofstream g("maxflow.out");
vector <int> g[1001];
int n, m;
int c[1001][1001], f[1001][1001];
int viz[1001],p[1001];
queue <int>Q;
void citire()
{   int x,y,capacitate;
    f>>n>>m;
    for(int i=1;i<=m;i++)
    {
        f>>x>>y>>capacitate;
        g[x].push_back(y);
        g[y].push_back(x);
        c[x][y]=capacitate;
    }
}
void bfs()
{
    Q.push(1);
    for(int i=1;i<=n;i++)
        viz[i]=0;
    viz[1]=1;
    while(!Q.empty())
    {
        int nod=Q.front();
        Q.pop();
        if(nod == n)
            continue;
        for(auto &v:graph[nod])
        {
            if(c[nod][v] == f[nod][v] || viz[v])
                continue;
            viz[v]=1;
            tata[v]=nod;
            Q.push(v);

        }
    }
    return viz[n];
}
int main()
{
    citire();
    int flux,fluxmin;
    for(flux=0;bfs();)
    {
        for(auto &i:graph[n])
        {
            fluxmin=inf;
            if(!viz[i] || c[i][n]==f[i][n])
                continue;
            p[n]=i;

            for(int j=n;j!=1;j=p[j])
                fluxmin=min(fluxmin,c[p[j]][j]-f[p[j]][j])
            for(int j=n;j!=1;j=p[j])
            {
                f[p[j]][j]+=fluxmin;
                f[j][p[j]]-=fmin;
            }
            flux+=fmin;
        }
    }
    cout<<flux<<" ";

    return 0;
}