Pagini recente » Cod sursa (job #2880931) | Cod sursa (job #766818) | Cod sursa (job #1528617) | Arhiva de probleme | Cod sursa (job #606689)
Cod sursa(job #606689)
#include <fstream>
#include <string.h>
#define INF 1 << 20
using namespace std;
int n,m,x,y,z,r,fx,i;
int c[1001][1001];
int f[1001][1001];
int q[1001],t[1001];
ifstream in("maxflow.in");
ofstream out("maxflow.out");
int Bf() {
int st,dr,x,i;
st=dr=1;
memset(t,0,sizeof(t));
q[1]=1;
t[1]=-1;
while (st<=dr) {
x=q[st];
for (i=1; i<=n; i++)
if (i!=x && t[i]==0 && c[x][i]>f[x][i]) {
dr++;
q[dr]=i;
t[i]=x;
if (i==n) return 1;
}
st++;
}
return 0;
}
int main () {
in >> n >> m;
memset(c,0,sizeof(c));
for (i=1; i<=m; i++) {
in >> x >> y >> z;
c[x][y]=z;
}
memset(f,0,sizeof(f));
fx=0;
while (Bf()) {
r=INF;
i=n;
while (i!=1) {
r=min(r,c[t[i]][i]-f[t[i]][i]);
i=t[i];
}
i=n;
while (i!=1) {
f[t[i]][i]+=r;
f[i][t[i]]-=r;
i=t[i];
}
fx+=r;
}
out << fx << '\n';
return 0;
}