Pagini recente » Cod sursa (job #3236440) | Cod sursa (job #2208867) | Cod sursa (job #846374) | Cod sursa (job #3161883) | Cod sursa (job #3138685)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream fin ("sate.in");
ofstream fout ("sate.out");
vector<pair<int, int>> G[36001];
priority_queue<pair<long long, int>> q;
int n, m, x, y, viz[36001];
long long dist[36001];
void dijkstra(int start)
{
q.push(make_pair(0, start));
while (!q.empty())
{
int c = q.top().second;
long long d = -q.top().first;
q.pop();
if (viz[c]) continue;
viz[c] = 1;
dist[c] = d;
for (int i = 0; i < G[c].size(); i++)
q.push(make_pair(-(d + G[c][i].second), G[c][i].first));
}
}
int main()
{
fin >> n >> m >> x >> y;
for (int i = 1; i <= m; i++)
{
int xi, yi, d;
fin >> xi >> yi >> d;
if (xi < yi)
{
G[xi].push_back(make_pair(yi, d));
G[yi].push_back(make_pair(xi, -d));
}
else
{
G[xi].push_back(make_pair(yi, -d));
G[yi].push_back(make_pair(xi, d));
}
}
dijkstra(x);
fout << dist[y];
return 0;
}