Pagini recente » Cod sursa (job #3187035) | Cod sursa (job #3269455) | Cod sursa (job #617800) | Cod sursa (job #1067480) | Cod sursa (job #647502)
Cod sursa(job #647502)
#include<fstream>
#include<iostream>
#include<vector>
#define NMAX 1<<10
#define INF 1<<28
using namespace std;
vector <int> G[NMAX];
int n,flow,lvl,viz[NMAX],tata[NMAX],cost[NMAX][NMAX],coada[NMAX];
bool BFS() {
int i,j,nr,nod,vecin;
lvl++;
coada[1]=1;
viz[1]=lvl;
nr=1;
for(i=1;i<=nr;i++) {
nod=coada[i];
for(j=0;j<G[nod].size();j++) {
vecin=G[nod][j];
if(viz[vecin]!=lvl&&cost[nod][vecin]>0) {
coada[++nr]=vecin;
tata[vecin]=nod;
viz[vecin]=lvl;
if(vecin==n)
return 1;
}
}
}
return 0;
}
void citire() {
int i,x,y,w,m;
ifstream in("maxflow.in");
in>>n>>m;
for(i=0;i<m;i++) {
in>>x>>y>>w;
G[x].push_back(y);
G[y].push_back(x);
cost[x][y]=w;
}
in.close();
}
int main() {
int i,e,clo=clock();
citire();
for(flow=0;BFS();flow+=e) {
e=INF;
for(i=n;i!=1;i=tata[i])
if(e>cost[tata[i]][i])
e=cost[tata[i]][i];
//e=min(e,cost[tata[i]][i]);
for(i=n;i!=1;i=tata[i]) {
cost[tata[i]][i]-=e;
cost[i][tata[i]]+=e;
}
}
ofstream out("maxflow.out");
out<<flow<<'\n';
out.close();
cout<<clock()-clo<<" ms\n";
return 0;
}