Pagini recente » Cod sursa (job #598813) | Cod sursa (job #899322) | Cod sursa (job #2382433) | Cod sursa (job #2705981) | Cod sursa (job #655656)
Cod sursa(job #655656)
#include<fstream>
#include<vector>
#include<queue>
#define inf 10000001
using namespace std;
ofstream g("fmcm.out");
int i,j,n,m,s,d1,xx,yy,cp,c1,r,rez=0,sum=0,min1;
int d[3600],cap[361][361],cost[361][361],fl[361][361],p[361];
bool b[361];
vector<int> a[361];
int q[1000010];
int bell()
{
int i,x,st,dr;
for(i=1;i<=n;++i)
d[i]=inf,b[i]=0,p[i]=-1;
d[s]=st=dr=0;
b[s]=1;
q[0]=s;
//q.push(s);
int ok=0;
while(st<=dr)
{
x=q[st];
for(i=0;i<a[x].size();++i)
if(cap[x][a[x][i]]-fl[x][a[x][i]]>0&&d[a[x][i]]>d[x]+cost[x][a[x][i]])
{
d[a[x][i]]=d[x]+cost[x][a[x][i]];
p[a[x][i]]=x;
if(!b[a[x][i]])
{
q[++dr]=a[x][i];
b[a[x][i]]=1;
}
}
b[x]=0;
++st;
}
if(d[d1]!=inf)
{
min1=inf;
r=1;
for(i=d1;i!=s;i=p[i])
{
if(min1>cap[p[i]][i]-fl[p[i]][i])
min1=cap[p[i]][i]-fl[p[i]][i];
}
for(i=d1;i!=s;i=p[i])
{
fl[p[i]][i]+=min1;
fl[i][p[i]]-=min1;
}
return d[d1]*min1;
}
return 0;
}
int main()
{
FILE*f=fopen("fmcm.in","r");
fscanf(f,"%d%d%d%d",&n,&m,&s,&d1);
for(i=1;i<=m;++i)
{
fscanf(f,"%d%d%d%d",&xx,&yy,&cp,&c1);
a[xx].push_back(yy);
a[yy].push_back(xx);
cost[xx][yy]=c1;
cost[yy][xx]=-c1;
cap[xx][yy]=cp;
}
r=1;
while(r)
{
r=0;
rez+=bell();
}
g<<rez<<"\n";
return 0;
}