Pagini recente » Cod sursa (job #1065659) | Cod sursa (job #1330153) | Cod sursa (job #516620) | Cod sursa (job #1818406) | Cod sursa (job #1207037)
#include<fstream>
#include<cstring>
#include <vector>
using namespace std;
ifstream fin ("maxflow.in");
ofstream fout("maxflow.out");
int t[1010],q[1010],c[1010][1010],f[1010][1010];
int n,i,x,y,z,u,p,sol,minim,m;
vector <int> l[1010];
int bfs() {
memset(t,0,sizeof(t));
t[1]=-1;
p=u=q[1]=1;
while (p<=u) {
x=q[p];
for (int i=0;i<l[x].size();i++) {
y=l[x][i];
if (t[y]==0 && c[x][y]>f[x][y]) {
q[++u]=y;
t[y]=x;
}
}
p++;
}
return t[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);
c[x][y]=z;
}
while (bfs()) {
for (i=0;i<l[n].size();i++) {
x=l[n][i];
if (t[x]!=0 && c[x][n]>f[x][n]){
minim=c[x][n]-f[x][n];
while (t[x]!=-1){
if (minim>c[t[x]][x]-f[t[x]][x])
minim=c[t[x]][x]-f[t[x]][x];
x=t[x];
}
x=l[n][i];
f[x][n]+=minim;
f[n][x]-=minim;
while (t[x]!=-1){
f[t[x]][x]+=minim;
f[x][t[x]]-=minim;
x=t[x];
}
sol+=minim;
}
}
}
fout<<sol<<"\n";
return 0;
}