Pagini recente » Rezultatele filtrării | Cod sursa (job #343791) | Cod sursa (job #555763) | Diferente pentru utilizator/raresegay intre reviziile 12 si 13 | Cod sursa (job #2247334)
# include <fstream>
# include <vector>
# include <queue>
# define DIM 355
# define INF 1000000000
using namespace std;
ifstream fin("fmcm.in");
ofstream fout("fmcm.out");
vector<int> Lista[DIM];
queue<int> q;
int c[DIM][DIM],f[DIM][DIM],val[DIM][DIM],Marcat[DIM],d[DIM],t[DIM],n,m,S,D,i,x,y,cap,cost,mn,sol;
bool flux(){
for(int i=1;i<=n;i++){
t[i]=0;
d[i]=INF;
}
d[S]=0;
q.push(S);
Marcat[S]=1;
while(!q.empty()){
int nc=q.front();
q.pop();
Marcat[nc]=0;
for(int i=0;i<Lista[nc].size();i++){
int nv=Lista[nc][i];
if(d[nv]>d[nc]+val[nc][nv]&&f[nc][nv]<c[nc][nv]){
d[nv]=d[nc]+val[nc][nv];
t[nv]=nc;
if(Marcat[nv]==0){
Marcat[nv]=1;
q.push(nv);
}
}
}
}
return t[D]>0;
}
int main () {
fin>>n>>m>>S>>D;
for(i=1;i<=m;i++){
fin>>x>>y>>cap>>cost;
Lista[x].push_back(y);
Lista[y].push_back(x);
c[x][y]=cap;
val[x][y]=cost;
val[y][x]=-cost;
}
while(flux()){
mn=INF;
for(x=D;t[x]>0;x=t[x])
mn=min(mn,c[t[x]][x]-f[t[x]][x]);
for(x=D;t[x]>0;x=t[x]){
f[t[x]][x]+=mn;
f[x][t[x]]-=mn;
sol+=val[t[x]][x]*mn;
}
}
fout<<sol<<"\n";
return 0;
}