Pagini recente » Cod sursa (job #1641881) | Cod sursa (job #1515264) | Cod sursa (job #1365082) | Cod sursa (job #1147886) | Cod sursa (job #281863)
Cod sursa(job #281863)
#include<stdio.h>
#define INF 0x3f3f3f
int n,m;
int A[1024][1024];
int flux[1024][1024];
int t[1024];
int flow;
void cit();
void rez();
int main() {
freopen("maxflow.in", "r", stdin);
//freopen("maxflow.out", "w", stdout);
cit();
rez();
return 0;
}
void cit() {
scanf("%d %d", &n, &m);
for(int i=1; i<=m; i++) {
int a,b,c;
scanf("%d %d %d", &a, &b, &c);
A[a][b]=c;
}
}
int bfs() {
int i;
int inc=0,sf=0;
int viz[1024];
int coada[1024];
//curatenie
for(i=1; i<=n; i++) {
viz[i]=0;
t[i]=0;
}
viz[1]=1;
coada[0]=1;
while(inc<=sf) {
int u=coada[inc++];
for(int i=1;i<=n;i++)
if(!viz[i])
if(A[u][i] - flux[u][i] > 0) {
coada[++sf]=i;
t[i]=u;
viz[i]=1;
}
}
if(t[n])
return 1;
return 0;
}
void rez() {
int flow;
int i,min;
while(bfs()) {
min=INF;
for(i=n; i; i=t[i]) {
if(A[t[i]][i]-flux[t[i]][i]<min)
min=A[t[i]][i]-flux[t[i]][i];
}
for(i=n; i; i=t[i]) {
flux[t[i]][i]+=min;
flux[i][t[i]]-=min;
}
flow+=min;
}
printf("%d ", flow);
}