Pagini recente » Cod sursa (job #2186445) | Cod sursa (job #430744) | Cod sursa (job #455090) | Cod sursa (job #1917540) | Cod sursa (job #1517893)
#include<cstdio>
#include<vector>
#include<queue>
#define INF 2000000000
using namespace std;
vector<int>L[400];
queue<int>q;
int n,m,s,d,a,b,aa,bb,i,j,ss,c[400][400],z[400][400],v[400],t[400],D[400],x[400][400];
FILE *f,*g;
int bf(){
for(int i = 1 ; i <= n ; i++){
D[i] = INF;
v[i] = 0;
}
q.push(s);
D[s] = 0;
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( D[b] > D[a] + z[a][b] && c[a][b] > x[a][b] ){
D[b] = D[a] + z[a][b];
t[b] = a;
if( v[b] == 0 ){
q.push(b);
v[b] = 1;
}
}
}
}
return D[d] != INF;
}
int main(){
f = fopen("fmcm.in","r");
g = fopen("fmcm.out","w");
fscanf( f , "%d%d%d%d", &n , &m , &s , &d );
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;
z[a][b] = bb;
z[b][a] = - bb;
}
while(bf()){
aa = INF;
a = d;
while( t[a] != 0 ){
if( aa > c[ t[a] ][a] - x[ t[a] ][a] )
aa = c[ t[a] ][a] - x[ t[a] ][a];
a=t[a];
}
a = d;
while( t[a] != 0 ){
ss += aa * z[ t[a] ][a];
x[ t[a] ][a] += aa;
x[a][ t[a] ] -= aa;
a = t[a];
}
}
fprintf( g , "%d" , ss );
fclose(f);
fclose(g);
return 0;
}