Pagini recente » Cod sursa (job #1781278) | Cod sursa (job #2297607) | Cod sursa (job #1822012) | Cod sursa (job #561776) | Cod sursa (job #281251)
Cod sursa(job #281251)
#include<fstream.h>
#define xx 1002
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
int n,m,c[xx][xx],f[xx][xx],t[xx],flux;
inline int min(int a,int b)
{ return (a<b ? a : b); }
int bf(int s,int d)
{
int li,ls,q[xx],nod,i;
memset(t,0,sizeof(t));
t[s]=-1;
q[1]=s;
for(li=ls=1;li<=ls;li++)
{
nod=q[li];
for(i=1;i<=n;i++)
if(!t[i] && c[nod][i]>f[nod][i])
{
q[++ls]=i;
t[i]=nod;
if(i==d) return 1;
}
}
return 0;
}
int main()
{
int i,r,x,y,j,s,d;
fin>>n>>m;
for(i=1;i<=m;i++)
{
fin>>x>>y;
fin>>c[x][y];
}
s=1,d=n;
while(bf(s,d))
for(i=1;i<=n;i++)
{
if(t[i]==-1 || c[i][d]<=f[i][d])
continue;
r=c[i][d]-f[i][d];
for(j=i;j && j!=s;j=t[j])
r=min(r,c[t[j]][j]-f[t[j]][j]);
if(r==0) continue;
f[i][d]+=r; f[d][i]-=r;
for(j=i;j && j!=s;j=t[j])
{
f[t[j]][j]+=r;
f[j][t[j]]-=r;
}
flux+=r;
}
fout<<flux<<'\n';
fout.close();
return 0;
}