Pagini recente » Cod sursa (job #1096893) | Cod sursa (job #14327) | Cod sursa (job #2661674) | Cod sursa (job #1473130) | Cod sursa (job #474398)
Cod sursa(job #474398)
#include<fstream>
#include<vector>
#include<queue>
using namespace std;
#define NMAX 1003
ifstream fi("maxflow.in");
ofstream fo("maxflow.out");
int n,m,x,y,fmin,flow,i,nod;
int cap[NMAX][NMAX],flux[NMAX][NMAX],viz[NMAX],t[NMAX];
vector<int> v[NMAX];
queue<int> q;
bool bfs() {
int i,nod;
for(i=2;i<=n;++i) viz[i]=false;
viz[1]=true;
q.push(1);
while(!q.empty()) {
nod=q.front();
q.pop();
if(nod==n) continue;
for(i=0;i<v[nod].size();++i) {
if(viz[v[nod][i]] || flux[nod][v[nod][i]]==cap[nod][v[nod][i]]) continue;
q.push(v[nod][i]);
viz[v[nod][i]]=true;
t[v[nod][i]]=nod;
}
}
return viz[n];
}
int main() {
fi>>n>>m;
while(m--) {
fi>>x>>y;
fi>>cap[x][y];
v[x].push_back(y);
v[y].push_back(x);
}
while(bfs())
for(i=0;i<v[n].size();++i) {
if(flux[v[n][i]][n]==cap[v[n][i]][n]) continue;
fmin=cap[v[n][i]][n]-flux[v[n][i]][n];
for(nod=v[n][i];nod!=1;nod=t[nod])
fmin=min(fmin,cap[t[nod]][nod]-flux[t[nod]][nod]);
flow+=fmin;
t[n]=v[n][i];
for(nod=n;nod!=1;nod=t[nod]) {
flux[t[nod]][nod]+=fmin;
flux[nod][t[nod]]-=fmin;
}
}
fo<<flow;
return 0;
}