Cod sursa(job #1968155)

Utilizator alex99Chelba Alexandru alex99 Data 17 aprilie 2017 15:22:16
Problema Flux maxim Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.49 kb
#include<bits/stdc++.h>
using namespace std;
ifstream f("maxflow.in");
ofstream g("maxflow.out");
unsigned int n,m,s,d;
int c[1001][1001];
int t[1001];
queue<int> q;
vector <int>  v[1001];
int bf()
{ unsigned int i,j,k;
    memset(t,0,sizeof(t));
    t[1]=-1;
    q.push(1); int ok=0;
    while(q.size())
    {
        i=q.front();
        q.pop();
        for( k=0;k<v[i].size();k++)
        {
            j=v[i][k];
            if(t[j]==0&&c[i][j]>0)
            {
                t[j]=i;
                if(j!=n)
                {
                    q.push(j);
                }
            }
        }
       }
    if(t[n]) return 1;
    return 0;
}

int flux_maxim()
{
    int flux=0;
    int minn,i;
    while(bf())
    {
        for(auto j:v[n])
        if(t[j])
        {
            t[n]=j;
            minn=200000;
            j=n;
            while(j!=1)
            {
                if(c[t[j]][j]<minn)
                    minn=c[t[j]][j];
                j=t[j];
            }
            j=n;

            while(j!=1)
            {
                c[t[j]][j]-=minn;
                c[j][t[j]]+=minn;
                j=t[j];
            }
            flux+=minn;
        }
    }
    return flux;
}

int main()
{unsigned int i;
    f>>n>>m;
    for(i=1;i<=m;i++)
    {
        int x,y,ci;
        f>>x>>y>>ci;
        v[x].push_back(y);
        v[y].push_back(x);
        c[x][y]=ci;

    }
    g<<flux_maxim()<<'\n';
    return 0;
}