Pagini recente » Cod sursa (job #3189338) | Cod sursa (job #2293215) | Cod sursa (job #9556) | Cod sursa (job #714607) | Cod sursa (job #2520276)
#include <bits/stdc++.h>
using namespace std;
ifstream in("maxflow.in");
ofstream out("maxflow.out");
int n,m;
int vf[5001],urm[5001],last[1001],nr;
int flow[5001];
int lista[1001],lant[1001],vr;
int sum;
void adauga(int nod,int vec,int fl)
{
vf[++nr]=vec;
urm[nr]=last[nod];
last[nod]=nr;
flow[nr]=fl;
}
bool drum(int nod,int from=0)
{
bool getOut=false;
if(nod==n)
return true;
for(int k=last[nod];k && !getOut;k=urm[k])
if(vf[k]!=from && flow[k])
{
lista[++vr]=k;
lant[vr]=vf[k];
getOut=drum(vf[k],nod);
if(!getOut)
vr--;
}
return getOut;
}
int main()
{
in>>n>>m;
for(int i,j,fl,k=1;k<=m;k++)
{
in>>i>>j>>fl;
adauga(i,j,fl);
}
while(drum(1)==true)
{
int minFound=flow[ lista[1] ];
for(int i=2;i<=vr;i++)
minFound=min(minFound,flow[ lista[i] ]);
for(int i=1;i<=vr;i++)
flow[ lista[i] ]-=minFound;
sum+=minFound;
vr=0;
}
out<<sum;
return 0;
}