Pagini recente » Cod sursa (job #2141686) | Cod sursa (job #1250677) | Cod sursa (job #1338179) | Cod sursa (job #2379394) | Cod sursa (job #607015)
Cod sursa(job #607015)
#include <fstream>
#include <cstring>
using namespace std;
ifstream in("maxflow.in");
ofstream out("maxflow.out");
int t[1001],fl,s,d,c[1001][1001],f[1001][1001],m,n,x,y,z,i;
int min(int a,int b) {
if (a>b) return b;
else return a;
}
int bf (int s,int d) {
int st,dr,nod,i,q[100];
st=1;
dr=1;
q[1]=s;
memset (t,0,sizeof(t));
t[s]=-1;
while (st<=dr) {
nod=q[st];
for (i=1;i<=n;i++)
if (!t[i] && c[nod][i]>f[nod][i]) {
dr++;
q[dr]=i;
t[i]=nod;
if (i==d) return 1;
}
st++;
}
return 0;
}
void flux () {
int i,j,r;
fl=0;
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];
j=i;
while (j!=s && j) {
r=min(r,c[t[j]][j]-f[t[j]][j]) ;
j=t[j];
}
if (r==0)
continue;
j=i;
f[i][d]+=r;
f[d][i]-=r;
while (j!=s && j) {
f[t[j]][j]+=r;
f[j][t[j]]-=r;
j=t[j];
}
fl=fl+r;
}
}
}
int main() {
in>>n>>m;
for (i=1;i<=m;i++) {
in>>x>>y>>z;
c[x][y]=z;
}
s=1;
d=n;
flux();
out<<fl;
return 0;
}