Pagini recente » Cod sursa (job #2516557) | Cod sursa (job #3278895) | Cod sursa (job #790912) | Cod sursa (job #2958911) | Cod sursa (job #563191)
Cod sursa(job #563191)
#include<fstream.h>
#define nmax 352
#define inf 32000
int n,m,a[nmax][nmax],b[nmax][nmax],t[nmax],d[nmax],s,f,min;
struct muchie
{int x,y,c;} e[25004];
void cit()
{
int i,j,k,co;
ifstream fin("fmcm.in");
fin>>n>>m;
fin>>s>>f;
for(k=1;k<=m;k++)
{
fin>>i>>j;
fin>>a[i][j]>>co;
e[k].x=i; e[k].y=j; e[k].c=co;
e[k+m].x=j; e[k+m].y=i; e[k+m].c=-co;
}
fin.close();
}
int bellman(int s,int f)
{
int i,j,k,l,sw,c;
for(k=1;k<=n;k++)
{
t[k]=0;
d[k]=inf;
}
d[s]=0; sw=1;
for(k=1;k<=n-1&&sw;k++)
{
sw=0;
for(l=1;l<=2*m;l++)
{
i=e[l].x;
j=e[l].y;
c=e[l].c;
if(d[i]+c<d[j]&&a[i][j]-b[i][j]>0)
{d[j]=d[i]+c; t[j]=i;sw=1;}
}
}
k=f;
while(k!=s&&k!=0)
k=t[k];
if(k==0)
return 0;
return 1;
}
void make_better(int nod)
{
if(nod!=s)
{
if(a[t[nod]][nod]-b[t[nod]][nod]>min)
min=a[t[nod]][nod]-b[t[nod]][nod];
make_better(t[nod]);
b[t[nod]][nod]+=min;
b[nod][t[nod]]-=min;
}
}
void afis()
{
int rez=0;
for(int i=1;i<=i;i++)
rez+=e[i].c*b[e[i].x][e[i].y];
ofstream fout("fmcm.out");
fout<<rez<<'\n';
fout.close();
}
int main()
{
cit();
while(bellman(s,f))
{
min=inf;
make_better(f);
}
afis();
return 0;
}