Pagini recente » Cod sursa (job #1472282) | Cod sursa (job #379552) | Cod sursa (job #1314682) | Cod sursa (job #1568567) | Cod sursa (job #2209047)
#include <fstream>
using namespace std;
ifstream in ("maxflow.in");
ofstream out ("maxflow.out");
//vector <int> v[1005];
int n,m,pred[1005],c[1002][1002],f[1002][1002],q[1002],viz[1002];
void reset_viz()
{
for(int i=1;i<=n;++i)
viz[i]=0;
}
void citire ()
{
int i,a,b,cc;
in>>n>>m;
for(i=1;i<=m;++i)
{
in>>a>>b>>cc;
// v[a].push_back(b);
c[a][b]=cc;
}
}
bool bfs ()
{
int st=0,dr=-1,x,y;
reset_viz();
q[++dr]=1;
while(st<=dr)
{
x=q[st++];
viz[x]=1;
for(y=1;y<=n;++y)
if(!viz[y] && c[x][y]>f[x][y])
{
q[++dr]=y;
pred[y]=x;
if(y==n)
return true;
}
}
return false;
}
int min_drum()
{
int x=n,vmin=99999999;
while(x!=1)
{
vmin=min(vmin,c[pred[x]][x]-f[pred[x]][x]);
x=pred[x];
}
return vmin;
}
void actualizare_drum(int vmin)
{
int x=n;
while(x!=1)
{
f[pred[x]][x]+=vmin;
f[x][pred[x]]-=vmin;
x=pred[x];
}
}
int main()
{
int vmin,s=0;
citire();
while(bfs())
{
vmin=min_drum();
s+=vmin;
actualizare_drum(vmin);
}
out<<s;
return 0;
}