Pagini recente » Cod sursa (job #887380) | Cod sursa (job #2979752) | Cod sursa (job #1893062) | Cod sursa (job #8942) | Cod sursa (job #1475240)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
bool cc(pair<int, int> a, pair<int, int> b)
{
if (a.second > b.second)
{
return true;
}
return false;
}
int main()
{
ifstream in("sate.in");
ofstream out("sate.out");
register int i, n, m, x, y,a,b,c;
register int distmin[30001];
vector<pair<int,int> > d[30001];
vector<pair<int, 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 = 0;i < d[x].size();i++)
{
gramada.push_back(make_pair(d[x][i].first, d[x][i].second));
push_heap(gramada.begin(), gramada.end(),cc);
}
for (i = 1;i <= n;i++)
{
distmin[i] = 2000000000;
}
while (!gramada.empty())
{
b = gramada[0].first;
c = gramada[0].second;
pop_heap(gramada.begin(), gramada.end(), cc);
gramada.pop_back();
if (distmin[b] > c)
{
distmin[b] = c;
for (i = 0;i < d[b].size();i++)
{
if (distmin[d[b][i].first] > c + d[b][i].second)
{
gramada.push_back(make_pair(d[b][i].first, d[b][i].second + c));
push_heap(gramada.begin(), gramada.end(), cc);
}
}
}
}
out << distmin[y];
}