Pagini recente » Cod sursa (job #1700803) | Cod sursa (job #1594371) | Cod sursa (job #2274404) | Cod sursa (job #585212) | Cod sursa (job #667995)
Cod sursa(job #667995)
#include<fstream>
#include<vector>
#define NMAX 1<<10
#define INF 1<<28
using namespace std;
vector <short> G[NMAX];
int n,flow,paint,viz[NMAX],tata[NMAX],cost[NMAX][NMAX],coada[NMAX];
bool BFS() {
int i,j,nr,nod,vecin;
paint++;
coada[1]=1;
viz[1]=paint;
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]!=paint&&cost[nod][vecin]>0) {
coada[++nr]=vecin;
tata[vecin]=nod;
viz[vecin]=paint;
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,j,e,nod;
citire();
for(flow=0;BFS();)
for(j=0;j<G[n].size();j++) {
nod=G[n][j];
if(viz[nod]==paint&&cost[nod][n]>0) {
tata[n]=nod;
e=INF;
for(i=n;i!=1;i=tata[i])
e=min(e,cost[tata[i]][i]);
if(e)
for(i=n;i!=1;i=tata[i]) {
cost[tata[i]][i]-=e;
cost[i][tata[i]]+=e;
}
flow+=e;
}
}
ofstream out("maxflow.out");
out<<flow<<'\n';
out.close();
return 0;
}