Pagini recente » Cod sursa (job #2660836) | Cod sursa (job #1584982) | Cod sursa (job #3213951) | Cod sursa (job #55896) | Cod sursa (job #602428)
Cod sursa(job #602428)
#include <iostream>
#include <fstream>
#include <queue>
#include <cstring>
#define DN 1005
using namespace std;
int n,m,fm,cap[DN][DN],fl[DN][DN],pre[DN];
bool bfs() {
memset(pre,-1,sizeof(pre));
pre[1]=0;
queue<int> c;
for(c.push(1); c.size(); c.pop()) {
int fr=c.front();
for(int i=1; i<=n; ++i) if(-1==pre[i] && cap[fr][i]>fl[fr][i]) {
c.push(i);
pre[i]=fr;
}
}
return pre[n]!=-1;
}
int main()
{
ifstream f("maxflow.in");
ofstream g("maxflow.out");
f>>n>>m;
for(int i=1; i<=m; ++i) {
int x,y,c;
f>>x>>y>>c;
cap[x][y]=c;
}
int c;
for(;bfs();) {
for(int i=1; i<=n; ++i) if(fl[i][n]<cap[i][n]) {
c=cap[i][n]-fl[i][n];
for(int y=i;pre[y];y=pre[y]) c=min(c,cap[pre[y]][y]-fl[pre[y]][y]);
fm+=c;
fl[i][n]+=c;
fl[n][i]-=c;
for(int y=i;pre[y];y=pre[y]) {
fl[pre[y]][y]+=c;
fl[y][pre[y]]-=c;
}
}
}
g<<fm;
return 0;
}