Pagini recente » Cod sursa (job #353950) | Cod sursa (job #1229846) | Cod sursa (job #1598372) | Cod sursa (job #256851) | Cod sursa (job #773886)
Cod sursa(job #773886)
#include<stdio.h>
#define dim 1010
#define inf 2000000000
int n, m , sum , i,x,y,z,C[dim][dim],F[dim][dim],viz[dim],min,T[dim] ;
FILE*f=fopen("maxflow.in","r");
FILE*g=fopen("maxflow.out","w");
struct nod{
int v;
nod *adr;
}*L[dim],*p,*c;
void read(){
fscanf(f,"%d%d",&n,&m);
for(i=1;i<=m;i++){
fscanf(f,"%d%d%d",&x,&y,&z);
p=new nod;
p->v=y;
p->adr=L[x];
L[x]=p;
p=new nod;
p->v=x;
p->adr=L[y];
L[y]=p;
C[x][y]=z;
}
}
int bfs(){
for(i=1;i<=n;i++)
viz[i]=0;
int D[2*dim];
int p=1,u=1,ok=0;
D[1]=1;viz[1]=1;
while(p<=u){
x=D[p];
c=L[x];
while(c){
if(!viz[c->v]&&(C[x][c->v]>F[x][c->v])){
D[++u]=c->v;
viz[c->v]=1;
T[c->v]=x;
if(c->v==n)
ok=1;
}
c=c->adr;
}
p++;
}
return ok;
}
int main(){
read();
while(bfs()){
c=L[n];
while(c){
if(viz[c->v] && (C[c->v][n]>F[c->v][n])){
T[n]=c->v;
z=n;min=inf;
while(T[z]){
if( (C[T[z]][z]-F[T[z]][z])<min)
min=C[T[z]][z]-F[T[z]][z];
z=T[z];
}
z=n;
while(T[z]){
F[T[z]][z]+=min;
F[z][T[z]]-=min;
z=T[z];
}
}
c=c->adr;
}
}
c=L[1];
while(c){
sum+=F[1][c->v];
c=c->adr;
}
fprintf(g,"%d",sum);
return 0;
}