Pagini recente » Cod sursa (job #2483026) | Cod sursa (job #1936090) | Cod sursa (job #502925) | Cod sursa (job #3162324) | Cod sursa (job #2124552)
#include <bits/stdc++.h>
using namespace std;
#define nmax 1001
#define inf INT_MAX
#define mp make_pair
#define s second
#define f first
ifstream fin("fmcm.in");
ofstream fout("fmcm.out");
vector <int> v[nmax];
int t[nmax],c[nmax][nmax],f[nmax][nmax],fc,fl,n,m,i,x,y,cs,j,z[nmax][nmax],d[nmax],s,de,cz,cc,cl,sl;
int dijkstra()
{
int nod,i;
priority_queue <pair<int,int> ,vector < pair <int,int> > ,greater <pair <int,int> > > h;
memset(t,0,sizeof(t));
t[s]=-1;
h.push(mp(0,s));
d[s]=0;
for(i=1; i<=n; i++)
if(i!=s)
d[i]=inf;
while(!h.empty())
{
nod=h.top().s;
h.pop();
for(i=0; i<v[nod].size(); i++)
{
if(t[v[nod][i]] || c[nod][v[nod][i]]==f[nod][v[nod][i]])
continue;
if(d[nod]+z[nod][i]<d[v[nod][i]])
{
d[v[nod][i]]=d[nod]+z[nod][i];
t[v[nod][i]]=nod;
if(v[nod][i]==de)
continue;
h.push(mp(d[v[nod][i]],v[nod][i]));
}
}
}
if(t[de]!=0)
return 1;
return 0;
}
int main()
{
fin>>n>>m>>s>>de;
for(i=1; i<=m; i++)
{
fin>>x>>y>>cs>>cz;
v[x].push_back(y);
v[y].push_back(x);
c[x][y]=cs;
z[y][x]=-cz;
z[x][y]=cz;
}
while(dijkstra())
{
cc=0;
fc=0;
if(!t[de])
continue;
for(i=0; i<v[de].size(); i++)
{
int i2=v[de][i];
if(!t[i2]||c[i2][de]==f[i2][de])
continue;
t[de]=i2;
fc=1e9;
cc=0;
for(j=de; j!=s; j=t[j])
fc=min(fc,c[t[j]][j]-f[t[j]][j]);
if(!fc)
continue;
for(j=de; j!=s; j=t[j])
{
f[t[j]][j]+=fc;
f[j][t[j]]-=fc;
cc+=z[t[j]][j];
}
sl+=cc*fc;
}
}
fout<<sl-2;
return 0;
}