Pagini recente » Cod sursa (job #2472124) | Cod sursa (job #585435) | Cod sursa (job #403337) | Cod sursa (job #1311792) | Cod sursa (job #1233609)
#include <fstream>
#include <vector>
#include <cstring>
using namespace std;
ifstream fin ("maxflow.in");
ofstream fout ("maxflow.out");
int n,m,i,x,y,minim,sol,C,c[1010][1010],f[1010][1010],t[1010],q[1010];
vector <int> l[1010];
bool bfs (int nod) {
int p,u;
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]==0?0:1);
}
int main () {
fin>>n>>m;
while (m--) {
fin>>x>>y>>C;
l[x].push_back(y);
l[y].push_back(x);
c[x][y]=C;
}
while (bfs(1)){
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){
minim=min(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;
}
}
memset(t,0,sizeof(t));
}
fout<<sol<<"\n";
return 0;
}