Cod sursa(job #2018830)

Utilizator catalin9898Bajenaru Catalin catalin9898 Data 6 septembrie 2017 00:26:50
Problema Flux maxim Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include <cstdio>
#include <vector>

using namespace std;
vector<int>v[1001];

int muc[1001][1001],m,n,viz[1001],q[1005];
int bfs()
{int j,flw=0,vf,i,st=0,dr=1,p;
q[0]=1;
for(i=2;i<=n;i++)viz[i]=0;
viz[1]=1;
while(st!=dr)
{
    vf=q[st];
    p=v[vf].size();
    for(j=0;j<p;j++)
    {i=v[vf][j];
        if(muc[vf][i]!=0&&viz[i]==0)
        {   if(i==n)
        {viz[n]=vf;

    int t=n,mi=9135136;
    while(t!=1)
    {
        if(mi>muc[viz[t]][t])mi=muc[viz[t]][t];
        t=viz[t];
    }
    t=n;
    while(t!=1)
    {
        muc[viz[t]][t]-=mi;

        muc[t][viz[t]]+=mi;
        t=viz[t];
    }

flw+=mi;viz[n]=0;
        } else {
            q[dr++]=i;
            viz[i]=vf;
                }

        }

    }
    st++;
}

    return flw;
}






int main()
{freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
     int i,a,b,c,flow=0;
     scanf("%d%d",&n,&m);
     for(i=0;i<m;i++)
     {
         scanf("%d%d%d",&a,&b,&c);


         v[a].push_back(b);
         v[b].push_back(a);

         muc[a][b]=c;
     }

     a=bfs();
     flow+=a;
     while(a)
     {
         a=bfs();
         flow+=a;
     }
     printf("%d",flow);



    return 0;
}