Pagini recente » Cod sursa (job #852012) | Cod sursa (job #2712752) | Cod sursa (job #2428409) | Cod sursa (job #2228809) | Cod sursa (job #420238)
Cod sursa(job #420238)
# include <fstream>
# include <iostream>
# include <vector>
# include <algorithm>
# define DIM 355
using namespace std;
struct nod{
int c, z;};
int n, S, D, t[DIM], cost, d[DIM];
nod c[DIM][DIM];
void read ()
{
int m;
ifstream fin ("fmcm.in");
fin>>n>>m>>S>>D;
int x, y, C, z;
for (;m--;)
{
fin>>x>>y>>C>>z;
c[x][y].c=C;
c[x][y].z=z;
c[y][x].c=0;
c[y][x].z=-z;
}
}
struct coada {
int i;
coada *next;};
int v[DIM];
int bellman (int kk)
{
for (int i=1;i<=n;i++)
d[i]=1000000000, t[i]=-1, v[i]=0;
coada *st, *dr, *q;
st=dr=new coada;
st->i=S;
st->next=NULL;
v[S]=1;
t[S]=0;
d[S]=0;
int k;
while (st)
{
q=st;
k=st->i;
if (k==D)
return 1;
v[k]=0;
for (int i=1;i<=n;i++)
if (i!=k && c[k][i].c>0 && d[k]+c[k][i].z<d[i])
{
d[i]=d[k]+c[k][i].z;
t[i]=k;
if(!v[i])
{
q=new coada;
q->i=i;
q->next=NULL;
dr->next=q;
dr=q;
v[i]=1;
}
}
q=st;
st=st->next;
delete q;
}
return 0;
}
void flux ()
{
int cmin;
int kk=0;
while (bellman(++kk))
{
cmin=1000000000;
for (int i=D;t[i];i=t[i])
if (cmin>c[t[i]][i].c)
cmin=c[t[i]][i].c;
for (int i=D;t[i];i=t[i])
{
c[t[i]][i].c-=cmin;
c[i][t[i]].c+=cmin;
}
cost+=cmin*d[D];
}
}
int main ()
{
read ();
flux();
ofstream fout ("fmcm.out");
fout<<cost;
return 0;
}