Pagini recente » Cod sursa (job #408010) | Cod sursa (job #2357258) | Cod sursa (job #1633258) | Cod sursa (job #321661) | Cod sursa (job #502199)
Cod sursa(job #502199)
#include<fstream>
using namespace std;
#define NR 500
#define inf 32000
#define min(a,b) (((a)<(b))?(a):(b))
int A[NR][NR],F[NR][NR],viz[NR],n,intr,ies;
int BF();
int FF()
{
int flux=0,nod,act;
while(BF())
{
nod=ies;
act=inf;
while(nod!=intr)
{
act=min(act,A[viz[nod]][nod]-F[viz[nod]][nod]);
nod=viz[nod];
}
flux+=act;
nod=ies;
while(nod!=intr)
{
F[viz[nod]][nod]+=act;
nod=viz[nod];
}
}
return flux;
}
int BF()
{
int i,Q[NR],pi,pf,nod;
memset(viz,0,sizeof viz);
pi=pf=0;
Q[pf]=intr;
while(pf>=pi&&!viz[ies])
{
nod=Q[pi];
for(i=1;i<=n;i++)
{
if(A[nod][i]&&F[nod][i]<A[nod][i]&&!viz[i])
{
viz[i]=nod;
Q[++pf]=i;
}
else if(A[i][nod]&&F[i][nod])
{
viz[i]=-nod;
Q[++pf]=i;
}
}
pi++;
}
return viz[ies];
}
int main()
{
int x,y,c,m;
ifstream in("flux.in");
ofstream out("flux.out");
in>>n>>m;
while(in>>x>>y>>c)
A[x][y]=c;
intr=1;
ies=n;
out<<FF()<<'\n';
return 0;
}