Pagini recente » Rating Silvia Papara (Salviexz) | Cod sursa (job #1165276)
#include<cstdio>
#define maxn 1003
#include<vector>
#include<queue>
#define inf 2000000003
using namespace std;
int C[maxn][maxn],F[maxn][maxn],t[maxn],flux,fmin,x,y,c,viz[maxn];
unsigned int n,m;
vector <int> G[maxn];
queue <int> Q;
int bfs(){
for(int i=2;i<=n;++i){
viz[i]=0;
}
viz[1]=1;
Q.push(1);
while(!Q.empty()){
x=Q.front();Q.pop();
if(x==n)
continue;
for(int i=0;i<G[x].size();++i){
if(viz[G[x][i]] || F[x][G[x][i]]==C[x][G[x][i]])
continue;
viz[G[x][i]]=1;
t[G[x][i]]=x;
Q.push(G[x][i]);
}
}
return viz[n];
}
void solve(){
while(bfs()){
for(int i=0;i<G[n].size();++i){
if(!viz[G[n][i]] || C[G[n][i]][n]==F[G[n][i]][n] )
continue;
t[n]=G[n][i];
fmin=inf;
for(int i=n;i!=1;i=t[i]){
fmin=min(fmin,C[t[i]][i]-F[t[i]][i]);
}
if(fmin==0)
continue;
for(int i=n;i!=1;i=t[i]){
F[t[i]][i]+=fmin;
F[i][t[i]]-=fmin;
}
flux+=fmin;
}
}
}
int main(){
freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=1;i<=m;++i){
scanf("%d%d%d",&x,&y,&c);
G[x].push_back(y);
G[y].push_back(x);
C[x][y]=c;
}
solve();
printf("%d",flux);
return 0;
}