Pagini recente » Cod sursa (job #401182) | Cod sursa (job #1956616) | Cod sursa (job #1099953) | Cod sursa (job #2399257) | Cod sursa (job #3197516)
#include <bits/stdc++.h>
#define cin fin
#define cout fout
using namespace std;
ifstream cin("fmcm.in");
ofstream cout("fmcm.out");
int a,b,c,cst,n,m,s,d,incoada[408],cap[408][408],cost[408][408],dist[408],tata[408],ok,f[408][408];
vector<int>G[408];
long long BellmanFord()
{
int i,j;
for(i=1;i<=n;i++)
{
dist[i]=2e9;
tata[i]=-1;
}
dist[s]=0;
queue<int>Q;
Q.push(s);
incoada[s]=1;
while(!Q.empty())
{
int k=Q.front();
incoada[k]=0;
Q.pop();
for(auto j:G[k])
{
if(cap[k][j]-f[k][j]>0 && dist[k]+cost[k][j]<dist[j])
{
dist[j]=dist[k]+cost[k][j];
tata[j]=k;
if(incoada[j]==0)
{
Q.push(j);
incoada[j]=1;
}
}
}
}
if(dist[d]!=2e9)
{
int fluxmin=2e9;
ok=1;
for(i=d;i!=s;i=tata[i])
fluxmin=min(fluxmin,cap[tata[i]][i]-f[tata[i]][i]);
for(i=d;i!=s;i=tata[i])
{
f[tata[i]][i]+=fluxmin;
f[i][tata[i]]-=fluxmin;
}
return fluxmin*dist[d];
}
return 0;
}
long long int Flux()
{
long long int ras=0;
ok=1;
while(ok)
{
ok=0;
ras+=BellmanFord();
}
return ras;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
cin>>n>>m>>s>>d;
for(int i=1;i<=m;i++)
{
cin>>a>>b>>c>>cst;
G[a].push_back(b);
G[b].push_back(a);
cap[a][b]=c;
cost[a][b]=cst;
cost[b][a]=-cst;
}
cout<<Flux();
return 0;
}