Cod sursa(job #2874088)

Utilizator mcip1977Muresan Ciprian mcip1977 Data 19 martie 2022 12:46:55
Problema Flux maxim Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.19 kb
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");

struct arc{ int j,c; };
int n,m,T[1001],C[1001][1001],fluxmax;
vector<int> G[1001];

int BF()
{
    queue<int> Q;
    for(int i=1;i<=n;i++)
        T[i]=0;
    Q.push(1);
    while(!Q.empty())
    {
        int i=Q.front();
        Q.pop();
        for(auto j: G[i])
            if(!T[j] && C[i][j]>0)
            {
                Q.push(j);
                T[j]=i;
                if(j==n) return 1;
            }
    }
    return 0;
}

int main()
{
    fin>>n>>m;
    for(int i=1;i<=m;i++)
    {
        int x,y,c;
        fin>>x>>y>>c;
        G[x].push_back(y);
        G[y].push_back(x);
        C[x][y]=c;
    }
    while(BF())
    {
        int cmin=110000;
        int i=n;
        while(i!=1)
        {
            if(C[T[i]][i]<cmin) cmin=C[T[i]][i];
            i=T[i];
        }
        fluxmax=fluxmax+cmin;
        i=n;
        while(i!=1)
        {
            C[T[i]][i]=C[T[i]][i]-cmin;
            C[i][T[i]]=C[i][T[i]]+cmin;
            i=T[i];
        }
    }
    fout<<fluxmax;
    return 0;
}