Pagini recente » Cod sursa (job #1011906) | Cod sursa (job #1452853) | Cod sursa (job #3175599) | Cod sursa (job #965102) | Cod sursa (job #2670927)
#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
using namespace std;
const int N=350;
int C[N+1][N+1];
int cost[N+1][N+1];
int dist[N+1];
int tata[N+1],n;
int s,d;
bool incoada[N+1];
vector <int> v[N+1];
queue <int> pq;
bool bfs()
{
for(int i=1; i<=n; i++)
dist[i]=1e9;
pq.push(s);
dist[s]=0;
incoada[s]=1;
while(!pq.empty())
{
int x=pq.front();
pq.pop();
incoada[x]=0;
for(auto it:v[x])
if(C[x][it]&&dist[x]+cost[x][it]<dist[it])
{
dist[it]=dist[x]+cost[x][it];
if(!incoada[it])
{
pq.push(it);
incoada[it]=1;
}
tata[it]=x;
}
}
return (dist[d]!=1e9);
}
int main()
{
#ifndef HOME
freopen("fmcm.in","r",stdin);
freopen("fmcm.out","w",stdout);
#endif // HOME
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
int m,i,a,b,c,d1;
cin>>n>>m>>s>>d;
for(i=1; i<=m; i++)
{
cin>>a>>b>>c>>d1;
v[a].push_back(b);
v[b].push_back(a);
C[a][b]=c;
cost[a][b]=d1;
cost[b][a]=-d1;
}
int sum=0;
while(bfs())
{
int min1=1e9;
for(int j=d; j!=s; j=tata[j])
min1=min(min1,C[tata[j]][j]);
if(min1!=0)
for(int j=d; j!=s; j=tata[j])
{
C[tata[j]][j]-=min1;
C[j][tata[j]]+=min1;
}
sum+=min1*dist[d];
}
cout<<sum;
return 0;
}