Pagini recente » Cod sursa (job #272780) | Cod sursa (job #275270)
Cod sursa(job #275270)
#include<fstream.h>
const int infinit=1.e20;
int t[100],f[100][100],c[100][100],n,s[100];
int bf( int nod,int d)
{
int q[100],i_c,sf_c,i;
memset(t,0,sizeof(t));
memset(s,0,sizeof(s));
i_c=sf_c=1;
t[1]=-1;
s[nod]=1;
q[i_c]=q[sf_c]=nod;
while(i_c<=sf_c)
{
for(i=1;i<=n;i++)
if(c[q[i_c]][i]!=0 && s[i]==0){ s[i]=1;
sf_c++;
t[i]=q[i_c];
q[sf_c]=i;
}
i_c++;
}
if(s[d]==1)return 1;
return 0;
}
int main()
{ int sum=0,m,i,j,o,min,cost;
ifstream g("maxflow.in");
ofstream h("maxflow.out");
g>>n>>m;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
f[i][j]=32000;
for(o=1;o<=m;o++)
{
g>>i>>j >>cost;
c[i][j]=c[j][i]=cost;
f[j][i]=0;
}
while(bf(1,n))
{
i=n;
min=32000;
while(t[i]!=-1)
{
if(c[t[i]][i]<min)min=c[t[i]][i];
i=t[i];
}
i=n;
while(t[i]!=-1)
{
c[t[i]][i]-=min;
c[i][t[i]]-=min;
f[i][t[i]]+=min;
i=t[i];
}
sum+=min;
}
h<<sum;
return 0;
}