Pagini recente » Cod sursa (job #389350) | Cod sursa (job #778912) | Cod sursa (job #921142) | Cod sursa (job #380858) | Cod sursa (job #386189)
Cod sursa(job #386189)
using namespace std;
#include <cstdio>
#define MAX 1005
#define INFINIT (1<<30)
int c[MAX][MAX], n, flux_maxim,
t[MAX], //vectorul de tati de la BFS
p[MAX],nrp;//precedentii destiatiei
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;
if(j==n)
p[++nrp] = i;
}
}
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++];
if(k == destinatie)
return 1; // important :)) , altminteri ia puzderie de TLE
for(i=1;i<=n;i++)
if(t[i]==-1 && c[k][i]!=0){
t[i] = k, coada[++dr] = i;
}
}
return t[n]>-1;
}
void edmond_karp(){
int i, dcur,k;
while(bfs(1,n))
for(i=1;i<=nrp;i++)
if(t[p[i]]>-1 && c[p[i]][n]>0){
dcur=INFINIT;
t[n]=p[i];
k=n;
while(t[k]){
if(c[t[k]][k]<dcur)
dcur = c[t[k]][k];
k = t[k];
}
for(k=n ; t[k] ; k = t[k])
c[t[k]][k] -= dcur, c[k][t[k]] += dcur;
flux_maxim += dcur;
}
}
int main(){
freopen("maxflow.in","r",stdin);
read();
edmond_karp();
write();
return 0;
}