Pagini recente » Cod sursa (job #1748795) | Cod sursa (job #2083875) | Cod sursa (job #1361457) | Cod sursa (job #3139518) | Cod sursa (job #2417373)
#include <iostream>
#include <cstdio>
#include <vector>
#include <bitset>
#define N 355
#define INF 0x3f3f3f3f
using namespace std;
int n,m,x,y,s,d;
int c[N][N], f[N][N], z[N][N], t[N], dp[N];
bitset <N> viz;
vector <int> g[N], q;
int dfs(){
for(int i = 1; i <= n; ++i)
dp[i] = INF;
viz.reset();
dp[s]=0;
q.clear();
q.push_back(s);
viz[s] = 1;
while(!q.empty()){
x = q.front();
q.erase(q.begin());
for(int y : g[x]){
if(c[x][y] > f[x][y] && dp[x]+z[x][y]<dp[y]){
dp[y]=dp[x]+z[x][y];
t[y] = x;
if(!viz[y]){
q.push_back(y);
viz[y]=1;
}
}
}
viz[x] = 0;
}
if(dp[d]!=INF){
int fmin = INF;
y = d;
while(y!=s){
x = t[y];
fmin = min(fmin,c[x][y] - f[x][y]);
y = x;
}
y = d;
while(y!=s){
x = t[y];
f[x][y] += fmin;
f[y][x] -= fmin;
y=x;
}
return fmin*dp[d];
}
return 0;
}
int main()
{
freopen("fmcm.in", "r", stdin);
freopen("fmcm.out", "w", stdout);
scanf("%d%d%d%d", &n,&m,&s,&d);
for(int i=0;i<m;++i){
scanf("%d%d", &x,&y);
scanf("%d%d", &c[x][y], &z[x][y]);
z[y][x] = -z[x][y];
g[x].push_back(y);
g[y].push_back(x);
}
int ok=1;
long long rez = 0;
while(ok){
ok = dfs();
rez+=1ll*ok;
}
cout<<rez;
return 0;
}