Pagini recente » Cod sursa (job #2046401) | Cod sursa (job #541338) | Cod sursa (job #497063) | Rating Lazar Dragos George (monsieurlazar) | Cod sursa (job #420284)
Cod sursa(job #420284)
#include<fstream>
#include<cstdio>
#include<vector>
#define pb push_back
#define MAX 352
#define INFI 1000000000
using namespace std;
struct capcost{
int c, z;
};
int S, D, n, t[MAX], v[MAX], d[MAX], fmcm=0;
capcost c[MAX][MAX];
void citire();
int bmf()
{
vector<int> coada;
int st, dr, k, i;
coada.pb(S);
st=dr=0;
for(i=1;i<=n;i++)
t[i]=-1, d[i]=INFI, v[i]=0;
v[S]=1, d[S]=0, t[S]=0;
while(st<=dr)
{
k=coada[st++];
v[k]=0;
for(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])
{
v[i]=1;
coada.pb(i);
dr++;
}
}
}
coada.clear();
return d[D]!=INFI;
}
void flux()
{
int cmin,k;
while(bmf())
{
cmin=INFI;
for(k=D; t[k]; k=t[k])
if(c[t[k]][k].c<cmin)
cmin=c[t[k]][k].c;
for(k=D; t[k]; k=t[k])
{
c[t[k]][k].c-=cmin;
c[k][t[k]].c+=cmin;
}
fmcm+=cmin*d[D];
}
}
int main()
{
freopen("fmcm.out","w",stdout);
citire();
flux();
printf("%d", fmcm);
return 0;
}
void citire()
{
int m;
ifstream fin("fmcm.in");
fin>>n>>m>>S>>D;
for(;m;m--)
{
int x,y,cap,z;
fin>>x>>y>>cap>>z;
c[x][y].c=cap;
c[x][y].z=z;
c[y][x].c=0;
c[y][x].z=-z;
}
}