Pagini recente » Cod sursa (job #2380717) | Cod sursa (job #1229962) | Cod sursa (job #2914034) | Cod sursa (job #1947913) | Cod sursa (job #729847)
Cod sursa(job #729847)
#include<stdio.h>
#include<vector>
#define nmax 351
#define inf 2000000000
using namespace std;
int c[nmax][nmax],f[nmax][nmax],cost[nmax][nmax],d[nmax],t[nmax],n,m,S,D,FLUX,COST;
vector <int> l[nmax];
void cit(){
FILE *f;
int x,y,z,t,i;
f=fopen("fmcm.in","r");
fscanf(f,"%d%d%d%d",&n,&m,&S,&D);
for(i=1;i<=m;i++){
fscanf(f,"%d%d%d%d",&x,&y,&z,&t);
l[x].push_back(y);
l[y].push_back(x);
c[x][y]=z;
cost[x][y]=t;
cost[y][x]=-t;
}
fclose(f);
}
int drum(){
int sw,i,j;
for(i=1;i<=n;i++){
d[i]=inf;
t[i]=0;
}
d[S]=0;
sw=0;
for(i=1;i<=n&&!sw;i++){
sw=1;
for(j=1;j<=n;j++)
for(unsigned int k=0;k<l[j].size();k++)
if(c[j][l[j][k]]!=f[j][l[j][k]]&&d[l[j][k]]>d[j]+cost[j][l[j][k]]&&d[j]!=inf){
sw=0;
d[l[j][k]]=d[j]+cost[j][l[j][k]];
t[l[j][k]]=j;
}
}
return d[D]==inf ? 0:1;
}
void actualizez(){
int k,min;
min=inf;
for(k=D;k!=S;k=t[k])
if(c[t[k]][k]-f[t[k]][k]<min)
min=c[t[k]][k]-f[t[k]][k];
for(k=D;k!=S;k=t[k]){
f[t[k]][k]+=min;
f[k][t[k]]-=min;
}
FLUX+=min;
COST+=min*d[D];
}
void afis(){
FILE *f;
f=fopen("fmcm.out","w");
fprintf(f,"%d\n",COST);
fclose(f);
}
int main(){
cit();
while(drum())
actualizez();
afis();
return 0;
}