Pagini recente » Cod sursa (job #2953114) | Cod sursa (job #1999706) | Cod sursa (job #2209620) | Cod sursa (job #2702370) | Cod sursa (job #1475286)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
int distmin[30001];
bool cc(int& a,int& b)
{
if (distmin[a] <= distmin[b]) { return false; }
return true;
}
int main()
{
ifstream in("sate.in");
ofstream out("sate.out");
register int i, n, m, x, y,a,b,c;
vector<pair<int,int> > d[30001];
vector<int> gramada;
in >> n;
in >> m;
in >> x;
in >> y;
for (i = 1;i <= m;i++)
{
in >> a;
in >> b;
in >> c;
d[a].push_back(make_pair(b, c));
d[b].push_back(make_pair(a, -c));
}
for (i = 1;i <= n;i++)
{
distmin[i] = 9999999;
}
distmin[x] = 0;
gramada.push_back(x);
while (!gramada.empty())
{
b = gramada[0];
pop_heap(gramada.begin(), gramada.end(), cc);
gramada.pop_back();
for (i = 0;i < d[b].size();i++)
{
if (distmin[d[b][i].first]>distmin[b] + d[b][i].second)
{
distmin[d[b][i].first] = distmin[b] + d[b][i].second;
gramada.push_back(d[b][i].first);
}
make_heap(gramada.begin(), gramada.end());
}
}
out << distmin[y];
}