Pagini recente » Cod sursa (job #1640522) | Cod sursa (job #1926415) | Cod sursa (job #2901406) | Cod sursa (job #2293198) | Cod sursa (job #409658)
Cod sursa(job #409658)
#include<stdio.h>
#include<queue>
using namespace std;
int n,m;
int A[1001][1001];
int viz[1001];
int tacsu[1001];
int f[1001];
long Flux;
queue<int> Q;
void cit();
void rez();
void afis();
int main() {
freopen("maxflow.in", "r", stdin);
freopen("maxflow.out", "w", stdout);
cit();
rez();
afis();
return 0;
}
void cit() {
scanf("%d%d",&n,&m);
for(int i=1; i<=m;i++) {
long x,y,z;
scanf("%ld%ld%ld",&x,&y,&z);
A[x][y]=z;
}
}
void bf() {
Q.push(1); //nod sursa
viz[1]=1;
f[1]=100;
while(!Q.empty()) {
int x=Q.front();
Q.pop();
for(int i=1; i<=n;i++) { //optm - 1 nod sursa mereu
if(A[x][i]>0 && !viz[i] && i!=n) { //i != destinatie
Q.push(i);
tacsu[i]=x;
viz[i]=1;
f[i]=min(f[x],A[x][i]);
}
}
}
}
void scade(int i, int v) {
for(int j=i; j!=1; j=tacsu[j]) {
A[ tacsu[j] ][j]-=v;
A[v][ tacsu[j] ] +=v;
}
}
long flux() {
long F=0,R=0;
int i;
while(1) {
for(i=1; i<=n;i++)
viz[i]=f[i]=0;
R=0;
bf();
for(i=2; i<=n;i++)
if(A[i][n]) {
R+=f[i];
tacsu[n]=i;
scade(n,f[i]);
}
if(!R)
return F;
F+=R;
}
}
void rez() {
Flux=flux();
}
void afis() {
printf("%ld", Flux);
}