Pagini recente » Cod sursa (job #479620) | Cod sursa (job #2136749) | Cod sursa (job #2179318) | Cod sursa (job #2368306) | Cod sursa (job #702121)
Cod sursa(job #702121)
#include <queue>
#include <fstream>
#include<vector>
#define pb(x) push_back(x)
#define mp(x,y) make_pair(x,y)
using namespace std;
vector<pair<int,pair<int,int> > > v[352];
priority_queue<pair<int,pair<int,int> >,vector<pair<int,pair<int,int> > >,greater<pair<int,pair<int,int> > > > q;
int i,j,n,m,x,y,c,a[352][352],co[352][352],viz[352],s,d,tata[352],cost,flux;
bool dij()
{for(i=1;i<=n;i++)
viz[i]=0;
viz[s]=-1;
for(i=0;i<v[s].size();i++)
if(a[s][v[s][i].second.first])
q.push(v[s][i]);
while(!q.empty())
{
if(!viz[q.top().second.first])
{x=q.top().second.first;
y=q.top().second.second;
c=q.top().first;
q.pop();
viz[x]=c;
tata[x]=y;
for(i=0;i<v[x].size();i++)
if(a[x][v[x][i].second.first]&&!viz[v[x][i].second.first])
{v[x][i].first+=c;
q.push(v[x][i]);
v[x][i].first-=c;
}
}
else
q.pop();
}
if(viz[d])
return true;
else
return false;
}
int main ()
{ifstream f("fmcm.in");
ofstream g("fmcm.out");
f>>n>>m>>s>>d;
while(m)
{f>>x>>y;
f>>a[x][y];
f>>c;
co[x][y]=c;
co[y][x]=-c;
v[x].pb(mp(c+1000,mp(y,x)));
v[y].pb(mp(-c+1000,mp(x,y)));
m--;
}
for(cost=0;dij();cost+=c)
{
x=d; flux=20000; c=0;
while(tata[x])
{
if(a[tata[x]][x]<flux) flux=a[tata[x]][x];
x=tata[x];
}
x=d;
while(tata[x])
{ a[tata[x]][x]-=flux;
a[x][tata[x]]+=flux;
c+=flux*co[tata[x]][x];
x=tata[x];
}
}
g<<cost;
f.close(); g.close();
return 0;
}