Mai intai trebuie sa te autentifici.
Cod sursa(job #373189)
Utilizator | Data | 12 decembrie 2009 21:20:36 | |
---|---|---|---|
Problema | Flux maxim | Scor | 70 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 0.95 kb |
using namespace std;
#include <cstdio>
#define MAX 1005
#define INFINIT (1<<30)
int c[MAX][MAX], n, flux_maxim, t[MAX];
void write(){
freopen("maxflow.out","w",stdout);
printf("%d",flux_maxim);
}
void read(){
int m,i,j,k;
scanf("%d%d",&n,&m);
for( ; m ; --m){
scanf("%d%d%d",&i,&j,&k);
c[i][j]=k;
}
}
int bfs(int sursa,int destinatie){
int coada[MAX], st=1,dr=1, k,i;
for(i=1; i <= n ;i++)
t[i]=-1;
coada[1]=sursa;t[sursa]=0;
while(st<=dr){
k=coada[st++];
for(i=1;i<=n;i++)
if(t[i]==-1 && c[k][i]!=0){
t[i] = k, coada[++dr] = i;
if(i==destinatie)
return 1;
}
}
return 0;
}
void edmond_karp(){
int i, dcur;
while(bfs(1,n)){
dcur=INFINIT;
i=n;
while(t[i]){
if(c[t[i]][i]<dcur)
dcur= c[t[i]][i];
i=t[i];
}
i=n;
while(t[i]){
c[t[i]][i] -= dcur;
c[i][t[i]] += dcur;
i=t[i];
}
flux_maxim +=dcur;
}
}
int main(){
freopen("maxflow.in","r",stdin);
read();
edmond_karp();
write();
return 0;
}