Pagini recente » Cod sursa (job #1927937) | Cod sursa (job #468983) | Cod sursa (job #968431) | Cod sursa (job #949143) | Cod sursa (job #928384)
Cod sursa(job #928384)
#include<fstream>
#include<cstring>
#define MUUU 999999999
using namespace std;
ifstream f("fmcm.in");
ofstream g("fmcm.out");
int i,n,x,mini,flux,costm,y,s,cap,dest,m,q[355000],viz[355],d[400],t[355],c[355][355],fl[355][355],cost[355][355];
//long long
struct muu{int x,y,c;};
muu mu[12505];
bool bfs()
{
int i,p,u,x;
for(i=1;i<=n;++i)
d[i]=MUUU,t[i]=0;
d[s]=0;
q[1]=s;
t[s]=0;
viz[s]=1;
p=u=1;
while(p<=u)
{
x=q[p];
++p;
viz[x]=0;
for(i=1;i<=n;++i)
// if(c[x][i]!=fl[x][i])
if(d[i]>d[x]+cost[x][i]&&c[x][i]>fl[x][i])
{
d[i]=d[x]+cost[x][i];
t[i]=x;
if(!viz[i])
{
++u;
q[u]=i;
viz[i]=1;
}
}
}
if(t[dest])
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;
cost[mu[i].x][mu[i].y]=mu[i].c;
cost[mu[i].y][mu[i].x]=-mu[i].c;
}
while(bfs())
{
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;
costm+=mini*d[dest];
}
g<<costm<<'\n';
return 0;
}