Pagini recente » Cod sursa (job #3225037) | Cod sursa (job #2726025) | Cod sursa (job #33917) | Cod sursa (job #1326782) | Cod sursa (job #2446646)
#include <bits/stdc++.h>
using namespace std;
#define maxb 8 ///buckets of bytes
#define bucket 0xFF //255,a byte aka bits 0-7(8 bits)
#define total_bytes (sizeof(vec[1]))
#define get_byte(x) ((x>>(byte*8))&bucket)
#define st first
#define nd second
#define pb push_back
#define mkp make_pair
#define FOR(i,a,b) for(int i=(a);i<=(b);++i)
#define FORS(i,a,b) for(int i=(a);i<(b);++i)
#define PII pair<int,int>
#define VI vector<int>
#define VPII vector<PII>
#define all(x) x.begin(),b.end()
#define SZ(x) ((int)(x).size())
#define ll long long
#define MOD 10000000 //998244353
#define maxn 400
const int inf=0x3f3f3f3f;
int N,M,S,D,cst[maxn][maxn],C[maxn][maxn],TT[maxn],inq[maxn];
int Cmin;
VI g[maxn];
priority_queue<PII,VPII,greater<PII>> heap;
bool fmcm()
{
int d[N+5],nod,mini=inf;
memset(d,inf,sizeof(d));
d[S]=0;
heap.push(mkp(d[S],S));
for(;!heap.empty();)
{
nod=heap.top().nd;
heap.pop();
inq[nod]=0;
for(auto it:g[nod])
if(C[nod][it]){
int newc=d[nod]+cst[nod][it];
if(d[it]>newc){
d[it]=newc;
TT[it]=nod;
if(!inq[it])heap.push(mkp(newc,it)),inq[it]=1;
}
}
}
for(int aux=D;aux!=S;aux=TT[aux])
mini=min(mini,C[TT[aux]][aux]);
Cmin+=(mini*d[D]);
for(int aux=D;aux!=S;aux=TT[aux])
C[TT[aux]][aux]-=mini,C[aux][TT[aux]]+=mini;
return((d[D]==inf)?0:1);
}
int main()
{
freopen("fmcm.in","r",stdin);
freopen("fmcm.out","w",stdout);
int x,y,c,z;
cin>>N>>M>>S>>D;
FOR(i,1,M){
cin>>x>>y>>c>>z;
g[x].pb(y);
cst[x][y]=z,cst[y][x]=-z;
C[x][y]=c;
}
for(;fmcm(););
cout<<Cmin;
}