Pagini recente » Cod sursa (job #2110658) | Cod sursa (job #2820643) | Cod sursa (job #1651047) | Cod sursa (job #2116965) | Cod sursa (job #276626)
Cod sursa(job #276626)
#include<fstream.h>
ifstream f("maxflow.in");
ofstream g("maxflow.out");
long n,m,a[1005][1005],v[1005][5005];
long fm,x[1005][4],q[1005],t[1005],gasit;
void citire()
{ f>>n>>m;
int i,j,k;
for(int p=1;p<=m;p++)
{ f>>i>>j>>k;
a[i][j]=k;
v[i][0]++;
v[i][v[i][0]]=j;
}
f.close();
}
void flux()
{ int i,j,s,d,u;
long min=4000000;
do{ gasit=0;
for(i=1;i<=n;i++)
{ q[i]=0;
t[i]=0;
}
s=d=1;
q[1]=1;
t[1]=-1;
while(s<=d)
{ for(int i=1;i<=v[q[s]][0];i++)
{ j=v[q[s]][i];
if(t[j]==0 && a[q[s]][j]>0)
{ d++;
q[d]=j;
t[j]=q[s];
if(j==n) gasit=1;
}
}
s++;
}
if(gasit){ int k=0;
u=n;
while(u!=1) { k++;
x[k][1]=t[u];
x[k][2]=u;
if(min>a[t[u]][u]) min=a[t[u]][u];
u=t[u];
}
fm+=min;
for(i=1;i<=k;i++)
{ int b=x[i][1];
int c=x[i][2];
a[b][c]-=min;
}
}
}while(gasit);
}
int main()
{ citire();
flux();
g<<fm;
g.close();
return 0;
}