Cod sursa(job #3033179)

Utilizator ATudorAAparaschivei Tudor Andrei ATudorA Data 23 martie 2023 14:59:20
Problema Flux maxim Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.2 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream f("maxflow.in");
ofstream g("maxflow.out");
struct muchie
{
    int u,v,cap;
};
vector <muchie> edge;
vector <int> G[1005];
int viz[5005];
int t[5005];
void dfs(int nod)
{
    int i,urm;
    viz[nod]=1;
    for(i=0;i<G[nod].size();i++)
    {
        urm=G[nod][i];
        if(viz[edge[urm].v]==0 && edge[urm].cap>0)
        {
            t[edge[urm].v]=urm;
            dfs(edge[urm].v);
        }
    }
}
int main()
{
    int n,m,u,v,cap,i,x,flux=0;
    f>>n>>m;
    for(i=1;i<=m;i++)
    {
        f>>u>>v>>cap; t[i]=-1;
        edge.push_back({u,v,cap});
        G[u].push_back(edge.size()-1);
        edge.push_back({v,u,0});
        G[v].push_back(edge.size()-1);
    }
    while(1)
    {
        dfs(1);
        if(viz[n]==0)
            break;
        x=n;
        while(t[x]!=-1)
        {
            edge[t[x]].cap--;
            edge[(t[x]^1)].cap++;
            x=edge[t[x]].u;
        }
        flux++;
        for(i=1;i<=n;i++)
        {
            viz[i]=0;
        }
        for(i=0;i<edge.size();i++)
        {
            t[i]=-1;
        }
    }
    g<<flux;
    return 0;
}