Pagini recente » Cod sursa (job #1929813) | Cod sursa (job #1212140) | tema | Istoria paginii runda/inforace__../clasament | Cod sursa (job #928286)
Cod sursa(job #928286)
#include<fstream>
#include<cstring>
#define MUUU 999999999
using namespace std;
ifstream f("fmcm.in");
ofstream g("fmcm.out");
int i,n,x,mini,flux,cost,y,s,cap,dest,m,d[400],t[355],c[355][355],fl[355][355];
struct muu{int x,y,c;};
muu mu[12505];
bool bf()
{
int i,j,co,k,okmu=1,p,nr;
for(i=1;i<=n;++i)
d[i]=MUUU;
d[s]=0;
memset(t,0,sizeof(t));
t[s]=-1;
for(nr=1;okmu&&nr<n;++nr)
{
okmu=0;
for(k=1;k<=m;++k)
{
i=mu[k].x;
j=mu[k].y;
co=mu[k].c;
if(c[i][j]>fl[i][j]&&d[j]>d[i]+co&&t[i])
{
d[j]=d[i]+co;
t[j]=i;
okmu=1;
}
if(c[j][i]<fl[j][i]&&d[i]>d[j]-co&&t[j])
{
d[i]=d[j]-co;
t[i]=j;
okmu=1;
}
}
}
if(d[dest]<MUUU)
{
return 1;
}
return 0;
}
int main()
{
f>>n>>m>>s>>dest;
for(i=1;i<=m;++i)
{
f>>mu[i].x>>mu[i].y>>cap>>mu[i].c;
c[mu[i].x][mu[i].y]=cap;
}
while(bf())
{
mini=MUUU;
i=dest;
while(i!=s)
{
mini=min(mini,c[t[i]][i]-fl[t[i]][i]);
i=t[i];
}
if(mini==0)
continue;
i=dest;
while(i!=s)
{
fl[t[i]][i]+=mini;
fl[i][t[i]]-=mini;
i=t[i];
}
flux+=mini;
cost+=mini*d[dest];
}
g<<cost<<'\n';
return 0;
}