Pagini recente » Cod sursa (job #1867089) | Cod sursa (job #1170771) | Cod sursa (job #1034416) | Cod sursa (job #1230798) | Cod sursa (job #1612919)
#include<cstdio>
#include<vector>
#include<queue>
#define INF 1000000000
using namespace std;
vector<int>L[510];
queue<int>q;
int n,m,s,ds,i,j,vmin,a,b,aa,bb,ss,sc,c[510][510],x[510][510],d[510],v[510],w[510][510],t[510];
FILE *f,*g;
int minim(int a,int b){
if(a<b)
return a;
return b;
}
int bf(){
for(int i=1;i<=n;i++){
d[i] = INF;
v[i] = 0;
}
d[s]=0;
v[s]=1;
q.push(s);
while( !q.empty() ){
a = q.front();
q.pop();
v[a] = 0;
for(int i=0; i<L[a].size(); i++){
b=L[a][i];
if( c[a][b] > w[a][b] && d[b] > d[a] + x[a][b] ){
d[b] = d[a] + x[a][b];
t[b] = a;
if( ! v[b] ){
v[b] = 1;
q.push(b);
}
}
}
}
return d[ds] != INF;
}
int main(){
f=fopen("fmcm.in","r");
g=fopen("fmcm.out","w");
fscanf(f,"%d%d%d%d",&n,&m,&s,&ds);
for(i=1;i<=m;i++){
fscanf(f,"%d%d%d%d",&a,&b,&aa,&bb);
L[a].push_back(b);
L[b].push_back(a);
c[a][b] = aa;
x[a][b] = bb;
x[b][a] = -bb;
}
while( bf() ){
vmin = INF;
a = ds;
do{
vmin = minim( vmin , c[ t[a] ][a] - w[ t[a] ][a] );
a = t[a];
}while( a != s );
a = ds;
do{
ss += vmin * x[ t[a] ][a];
w[ t[a] ][a] += vmin;
w[a][ t[a] ] -= vmin;
a = t[a];
}while( a != s );
}
fprintf(g,"%d",ss);
fclose(f);
fclose(g);
return 0;
}