Pagini recente » Istoria paginii runda/feofjeofnqefe/clasament | Rating Ludusan Darius Vladut (LudsuanVladut) | Cod sursa (job #1470376) | Cod sursa (job #83567) | Cod sursa (job #2671131)
#include<bits/stdc++.h>
#define N 800000
#define INF 2000000000
using namespace std;
ifstream r("fmcm.in");
ofstream wr("fmcm.out");
int sol, n, m, i, s, d, u, w, *v, cp;
int fl, cs, cu, cm[351], first, last;
int co[N], mark[351], dad[351], vec[351][351], gr[351];
short int c[351][351], C[351][351];
void flux()
{
for(;;)
{
for(i = 1; i <= n; i++){
cm[i] = INF;
}
cm[s] = 0; first = last = 1; co[1] = s; mark[s] = 1;
while(first <= last)
{
u = co[first++];
cu = cm[u];
mark[u] = 0;
for(v = vec[u]; *v; v++){
if(c[u][*v] && cu + C[u][*v] < cm[*v])
{
cm[*v] = cu + C[u][*v];
dad[*v] = u;
if(!mark[*v])
{
mark[*v] = 1; co[++last] = *v;
}
}
}
}
if(cm[d] == INF){
return;
}
fl = INF;
for(u = d; u != s; u = dad[u]){
fl = (fl < c[dad[u]][u]) ? fl : c[dad[u]][u];
}
for(u = d; u != s; u = dad[u])
{
c[dad[u]][u] -= fl;
c[u][dad[u]] += fl;
}
sol += fl * cm[d];
}
}
int main()
{
v = new int;
r>>n>>m>>s>>d;
for(i = 1; i <= m; i++)
{
r>>u>>w>>cp>>cs;
c[u][w] = cp;
C[u][w] = cs;
C[w][u] = -cs;
vec[u][gr[u]++] = w;
vec[w][gr[w]++] = u;
}
flux();
wr<<sol;
return 0;
}