Pagini recente » Cod sursa (job #2182880) | Cod sursa (job #1453731) | Cod sursa (job #1149134) | Cod sursa (job #1996536) | Cod sursa (job #2824741)
#include <bits/stdc++.h>
#define NMAX 1000
#define VALMAX (1LL<<31)-1
using namespace std;
ifstream fi("maxflow.in");
ofstream fo("maxflow.out");
int n,m,x,y,c;
int cap[NMAX+5][NMAX+5], flux[NMAX+5][NMAX+5];
vector <int> G[NMAX+5];
int prec[NMAX+5];
int minc;
int sol;
queue <int> q;
bool bfs(){
for(int i=1;i<=n;i++){
prec[i]=0;
}
q.push(1);
while(!q.empty()){
x=q.front();
q.pop();
if(x!=n){
for(int i=0;i<G[x].size();i++){
y=G[x][i];
if(cap[x][y]-flux[x][y]>0&&(!prec[y]||y==n)){
q.push(y);
prec[y]=x;
}
}
}
}
return (prec[n]!=0);
}
int main(){
fi>>n>>m;
for(int i=1;i<=m;i++){
fi>>x>>y>>c;
G[x].push_back(y);
G[y].push_back(x);
cap[x][y]=c;
}
while(bfs()){
for(int i=0;i<G[n].size();i++){
if((prec[G[n][i]]||G[n][i]==1)&&cap[G[n][i]][n]-flux[G[n][i]][n]>0){
prec[n]=G[n][i];
minc=VALMAX;
for(int nod=n;nod!=1;nod=prec[nod]){
minc=min(minc,cap[prec[nod]][nod]-flux[prec[nod]][nod]);
}
for(int nod=n;nod!=1;nod=prec[nod]){
flux[prec[nod]][nod]+=minc;
flux[nod][prec[nod]]-=minc;
}
sol+=minc;
}
}
}
fo<<sol;
fi.close();
fo.close();
}