Pagini recente » Cod sursa (job #2722315) | Cod sursa (job #912017) | Cod sursa (job #1342198) | Cod sursa (job #2110072) | Cod sursa (job #250364)
Cod sursa(job #250364)
#include <iostream.h>
#include <fstream.h>
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
int a[100][100],b[100][100],t[100],flux,n,st,f;
void minim(int i, int min)
{if (i!=st)
if (t[i]>0)
{if (min>a[t[i]][i]-b[t[i]][i]) min=a[t[i]][i]-b[t[i]][i];
minim(t[i],min);
b[t[i]][i]+=min;
}
else
{if (min>b[i][-t[i]]) min=b[i][-t[i]];
minim(-t[i],min);
b[i][-t[i]]-=min;
}
}
int drum()
{int c[100],p=1,u=1,nod,i;
memset(t,0,sizeof(t));
c[1]=st;
t[st]=-1;
for (p=1;p<=u;p++)
{nod=c[p];
for (i=1;i<=n;i++)
if (a[nod][i]-b[nod][i]>0 && !t[i])
{u++; c[u]=i; t[i]=nod;
if (i==f) return 1;
}
else
if (b[i][nod]>0 && !t[i] && i!=f)
{u++; c[u]=i; t[i]=-nod;
}
}
return 0;
}
int main()
{int x,y,cost,i,m;
fin>>n>>m;
st=1;
f=n;
while (fin>>x>>y>>cost) a[x][y]=+cost;
while (drum())
minim(f,30000);
for (i=1;i<=n;i++)
flux+=a[st][i];
fout<<flux;
fout.close();
return 0;
}