Cod sursa(job #1893588)

Utilizator geo_furduifurdui geo geo_furdui Data 25 februarie 2017 19:58:56
Problema Flux maxim Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.36 kb
#include <fstream>
#include<climits>
using namespace std;
ifstream cin ("maxflow.in");
ofstream cout ("maxflow.out");
int n,m,viz[1010],coada[100010],cost[1010][1010],tata[1010],vec[1010],l,flux,nr;
void read ()
{ int a,b,c;
    cin>>n>>m;
    for(int i=1;i<=m;i++)
    {
        cin>>a>>b>>c;
         cost[a][b]=c;
    }
}
bool bfs ()
{ for(int i=1;i<=n;i++) viz[i]=0;
    int pi=1,ps=1;
    coada[1]=1;
    while(ps<=pi)
    {
        for(int i=1;i<=n;i++)
        {
            if(cost[coada[ps]][i]!=0 && viz[i]==0)
            {
                viz[i]=1; coada[++pi]=i; tata[i]=coada[ps];
            }
        } ++ps;
    }
    if(viz[n]==1) return true;
    return false;
}
void solve_here ()
{ nr=1;
    while(bfs())
    {
       for(int i=1;i<=n;i++)
       {
           if(cost[i][n]!=0 && viz[i]==1)
           {
                tata[n]=i; int minim=INT_MAX,x=n;
               while(x!=1)
               {
                   minim=min(cost[tata[x]][x],minim); x=tata[x];
               }
               x=n;
               while(x!=1)
               {
                   cost[tata[x]][x]-=minim;  x=tata[x];
               } flux+=minim;
           }
       }
    }
}
void write()
{
    cout<<flux;
}
int main()
{
    read();
    solve_here();
    write();
    cin.close();
    cout.close();
    return 0;
}