Cod sursa(job #1665211)

Utilizator robertkarolRobert Szarvas robertkarol Data 26 martie 2016 18:13:55
Problema Flux maxim Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.36 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <cstring>
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
vector <int> v[1001];
int C[1001],t[1001],c[1001][1001],n,m,x,y,i,flow,MIN,cap;
int bf()
{
    int prim,ultim;
    vector<int>::iterator i;
    prim=ultim=1; C[prim]=1; t[1]=-1;
    while(prim<=ultim)
    {
        for(i=v[C[prim]].begin();i<v[C[prim]].end();i++)
            if(!t[*i]&&c[C[prim]][*i])
            {
                C[++ultim]=*i;
                t[*i]=C[prim];
            }
       prim++;
    }
   return t[n];
}
int main()
{
    fin>>n>>m;
    for(i=1;i<=m;i++)
    {
        fin>>x>>y>>cap;
        v[x].push_back(y);
        v[y].push_back(x);
        c[x][y]=cap;
    }
    while(bf())
    {
       vector<int>::iterator j;
       for(j=v[n].begin();j<v[n].end();j++)
       {
           if(t[*j]&&c[*j][n])
           {
               MIN=c[*j][n];
               for(i=*j;i>1;i=t[i])
                if(c[t[i]][i]<MIN) MIN=c[t[i]][i];
               flow+=MIN;
               for(i=*j;i>1;i=t[i])
               {
                   c[t[i]][i]-=MIN;
                   c[i][t[i]]+=MIN;
               }
               cout<<MIN<<" ";
               c[*j][n]-=MIN;
           }
       }
       memset(t,0,sizeof(t));
    }
    fout<<flow;
    return 0;
}