Pagini recente » Cod sursa (job #1600258) | Cod sursa (job #223201) | Cod sursa (job #471602) | Cod sursa (job #2863473) | Cod sursa (job #976215)
Cod sursa(job #976215)
#include<fstream>
using namespace std;
ifstream f("maxflow.in");
ofstream g("maxflow.out");
int i,j,n,m,a[1001],b[1001],t[1004][1004],f1[1004][1004],x,y,c,inc,sf,min1;
int q[1004],viz[1004],v[1003],s1=0;
int bf()
{
int st,dr,x,i;
for(i=1;i<=n;i++)
viz[i]=0;
st=dr=0;
q[0]=1;
while(st<=dr)
{
x=q[st];
for(i=1;i<=n;i++)
if(t[x][i]-f1[x][i]>0&&!viz[i])
{
viz[i]=1;
q[++dr]=i;
v[i]=x;
}
st++;
}
return viz[sf];
}
int main()
{
//freopen("maxflow.in","r",stdin);
//freopen("maxflow.out","w",stdout);
//scanf("%d%d",&n,&m);
f>>n>>m;
for(i=1;i<=m;i++)
{
//scanf("%d%d%d",&x,&y,&c);
f>>x>>y>>c;
t[x][y]=c;
}
inc=1,sf=n;
while(bf())
{
for(i=1;i<=n;i++)
if(t[i][n]-f1[i][n]>0)
{
min1=t[i][n]-f1[i][n];
for(j=i;j!=inc;j=v[j])
if(t[v[j]][j]-f1[v[j]][j]<min1)
min1=t[v[j]][j]-f1[v[j]][j];
for(j=i;j!=1;j=v[j])
{
f1[v[j]][j]+=min1;
f1[j][v[j]]-=min1;
}
f1[i][n]+=min1;
f1[n][i]-=min1;
s1+=min1;
}
}
//printf("%d",s1);
g<<s1;
return 0;
}