Pagini recente » Cod sursa (job #2163693) | Cod sursa (job #1869346) | Cod sursa (job #2394236) | Cod sursa (job #3196971) | Cod sursa (job #968482)
Cod sursa(job #968482)
#include <iostream>
#include <fstream>
#include <cmath>
#include <vector>
#include <bitset>
#include <queue>
#include <deque>
#include <list>
#include <set>
#include <ctime>
#include <string>
#include <cstring>
#include <iomanip>
#include <algorithm>
using namespace std;
ifstream ff("fmcm.in");
ofstream gg("fmcm.out");
#define max 352
vector<int> vv[max];
int n, m, s, d, cc[max][max], zz[max][max], qq[2][max], q0, q1, ww[max];
int dd[max], tt[max], rr[max][max];
bool bel(){
int x0=0, x1=1, a, b, l;
q0=q1=0;
memset(ww, 0, sizeof(ww));
for(int i=1;i<=n;i++) dd[i]=0xfffffff;
qq[x0][q0++]=s;
ww[s]=1;
dd[s]=0;
for(int k=1;k<=n;k++){
while(q0>0){
a=qq[x0][--q0];
l=vv[a].size();
for(int i=0;i<l;i++){
b=vv[a][i];
if(dd[b]>dd[a]+zz[a][b] && rr[a][b]<cc[a][b]){
dd[b]=dd[a]+zz[a][b];
if(ww[b]!=k) qq[x1][q1++]=b;
ww[b]=k;
tt[b]=a;
}
}
}
x0^=1; x1^=1; swap(q0, q1);
}
return ww[d];
}
void flu(){
int r=0, c;
while(bel()){
c=0xfffffff;
for(int x=d;x!=s;x=tt[x])c=min(c, cc[tt[x]][x]-rr[tt[x]][x]);
if(c!=0){
for(int x=d;x!=s;x=tt[x]){
rr[tt[x]][x] += c;
rr[x][tt[x]] -= c;
r+=c*zz[tt[x]][x];
}
}
}
gg << r << "\n";
}
int main(){
int a, b, c, z;
ff >> n >> m >> s >> d;
for(int i=0;i<m;i++){
ff >> a >> b >> c >> z;
vv[a].push_back(b);
vv[b].push_back(a);
cc[a][b]=c;
zz[a][b]=z;
if(b!=d)zz[b][a]=-z;
}
flu();
}