Pagini recente » Cod sursa (job #2644674) | Cod sursa (job #246088) | Cod sursa (job #3273283) | Cod sursa (job #3268910) | Cod sursa (job #245290)
Cod sursa(job #245290)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<vector>
using namespace std;
#define N 1024
#define INF 100000000
vector<long> a[N];
long q[N], c[N][N], tata[N], n, nr, sol[N] /*, *a[N]*/;
int bfs(){
long x,p,u,i,j;
memset(tata,0,N * sizeof(long));
q[0]=1;tata[1]=1;nr=0;
for (p=0,u=0;p<=u;p++){
x=q[p];
/* for (j=1;j<=a[x][0];j++)
if (c[x][a[x][j]]>0 &&!tata[a[x][j]]){
tata[a[x][j]]=x;q[++u]=a[x][j];
if (tata[n]!=0){ u--,tata[n]==0; sol[++nr]=x;}
}
*/
for (j=0;j<a[x].size();j++)
if (c[x][a[x][j]]>0 &&!tata[a[x][j]]){
tata[a[x][j]]=x;q[++u]=a[x][j];
if (tata[n]!=0){ u--,tata[n]==0; sol[++nr]=x;}
}
}
return (tata[n]);
}
int main (){
long x,y,z,flux=0,i,m,min,w;
freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
scanf("%ld %ld ",&n,&m);
// for (i=1;i<=n;i++){a[i]=(long*) malloc(sizeof(long));a[i][0]=0;}
for (i=1;i<=m;i++){ scanf("%ld %ld %ld",&x,&y,&z);
c[x][y]=z;
a[x].push_back(y);
a[y].push_back(x);
/* a[x][0]++;
a[x]=(long*) realloc (a[x],(a[x][0]+1)*sizeof(long));
a[x][a[x][0]]=y;
a[y][0]++;
a[y]=(long *) realloc (a[y],(a[y][0]+1)*sizeof(long));
a[y][a[y][0]]=x;
*/
}
while (bfs()){
min=INF;
for (w=1;w<=nr;w++){
min=c[sol[w]][n];
for (i=sol[w];i!=1;i=tata[i])
if (c[tata[i]][i]<min) min=c[tata[i]][i];
c[sol[w]][n]-=min;c[n][sol[w]]+=min;
for (i=sol[w];i!=1;i=tata[i]) c[tata[i]][i]-=min,c[i][tata[i]]+=min;
flux+=min;
}
}
printf("%ld\n",flux);
return 0;
}