Pagini recente » Cod sursa (job #881230) | Cod sursa (job #2457010) | Cod sursa (job #1489533) | Cod sursa (job #602802) | Cod sursa (job #279418)
Cod sursa(job #279418)
#include<fstream.h>
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
const long max=3000000;
long a[1005][1005],V[1005][1005],n;
long fm,i,j,s,m,d,x[1005][30],Q[1005],p[1005],t[1005],gasit,v;
int main()
{ int e,f,g;
fin>>n>>m;
while(fin>>e>>f>>g)
{ a[e][f]=g;
V[e][0]++;
V[e][V[e][0]]=f;
}
do { gasit=0;
for(i=1;i<=n;i++)
{ Q[i]=0;
p[i]=0;
t[i]=0;
}
s=d=1;
p[1]=1;
Q[1]=1;
while(s<=d)
{ for(i=1;i<=V[Q[s]][0];i++)
{ int j=V[Q[s]][i];
if(p[j]==0&&a[Q[s]][j]>0)
{ d++;
Q[d]=j;
p[j]=1;
t[j]=Q[s];
if(j==n) gasit=1;
}
}
s++;
}
if(gasit)
{ int k=0;
v=n;
while(v!=1)
{ k++;
x[k][1]=t[v];
x[k][2]=v;
v=t[v];
}
int min=max;
for(i=1;i<=k;i++)
if(min>a[x[i][1]][x[i][2]])
min=a[x[i][1]][x[i][2]];
fm+=min;
for(i=1;i<=k;i++)
{ int b=x[i][1];
int c=x[i][2];
a[b][c]=a[b][c]-min;
a[c][b]+=min;
}
}
}while(gasit);
fout<<fm;
fin.close();
fout.close();
return 0;
}