Pagini recente » Cod sursa (job #2226844) | Cod sursa (job #452215) | Cod sursa (job #1149068) | Monitorul de evaluare | Cod sursa (job #785939)
Cod sursa(job #785939)
#include<iostream>
#include<fstream>
#include<vector>
#include<string.h>
using namespace std;
const int NMAX = 1001;
int c[NMAX][NMAX],flux[NMAX][NMAX],cd[NMAX],viz[NMAX],p[NMAX],n;
vector <int> v[NMAX];
int bfs()
{
int nod,st,dr;
memset(viz,0,sizeof(viz));
cd[1]=1;
viz[1]=1;
st=1;
dr=1;
while(st<=dr) {
nod=cd[st];
st++;
if (nod == n) continue;
for(vector <int> :: iterator it=v[nod].begin();it!=v[nod].end();it++) {
if(viz[*it]==0 && c[nod][*it]>flux[nod][*it]) {
viz[*it]=1;
cd[++dr]=*it;
p[*it]=nod;
}
}
}
return viz[n];
}
int main ()
{
int m,i,x,y,capacity,fluxmax,fluxcurent,nod;
ifstream f("maxflow.in");
ofstream g("maxflow.out");
f>>n>>m;
for(i=1;i<=m;i++) {
f>>x>>y>>capacity;
v[x].push_back(y);
v[y].push_back(x);
c[x][y]=capacity;
}
f.close();
for(fluxmax=0 ; bfs(); ) {
for(i=0;i<=v[n].size()-1;i++) {
p[n]=v[n][i];
fluxcurent=(1<<30);
for(nod=n;nod!=1;nod=p[nod])
fluxcurent=min(fluxcurent,c[p[nod]][nod]-flux[p[nod]][nod]);
for(nod=n;nod!=1;nod=p[nod]) {
flux[p[nod]][nod]=flux[p[nod]][nod]+fluxcurent;
flux[nod][p[nod]]=flux[nod][p[nod]]-fluxcurent;
}
fluxmax=fluxmax+fluxcurent;
}
}
g<<fluxmax;
g.close();
return 0;
}