Pagini recente » Cod sursa (job #2338391) | Cod sursa (job #1675854) | Cod sursa (job #1075767) | Cod sursa (job #869834) | Cod sursa (job #2466691)
#include <fstream>
#include <vector>
#include <cstring>
#define DIM 1001
#define inf 2000000000
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
int n,m,i,x,y,z,nod,fmin,flux,c[DIM],v[DIM],t[DIM],cap[DIM][DIM],f[DIM][DIM];
vector<int> L[DIM];
int bfs() {
memset(v,0,sizeof(v));
int p=1,u=1;
c[1]=v[1]=1;
while (p<=u) {
int nod=c[p];
for (int i=0;i<L[nod].size();i++) {
int vecin=L[nod][i];
if (v[vecin]==0&&cap[nod][vecin]>f[nod][vecin]) {
v[vecin]=1;
c[++u]=vecin;
t[vecin]=nod;
}
}
p++;
}
return v[n];
}
int main() {
fin>>n>>m;
for (i=1;i<=m;i++) {
fin>>x>>y>>z;
L[x].push_back(y);
L[y].push_back(x);
cap[x][y]=z;
}
while (bfs()) {
fmin=inf, nod=n;
while (nod!=1) {
fmin=min(fmin,cap[t[nod]][nod]-f[t[nod]][nod]);
nod=t[nod];
}
nod=n;
while (nod!=1) {
f[t[nod]][nod]+=fmin;
f[nod][t[nod]]-=fmin;
nod=t[nod];
}
flux+=fmin;
}
fout<<flux;
return 0;
}