Pagini recente » Cod sursa (job #3138976) | Cod sursa (job #328546) | Cod sursa (job #1492914) | Cod sursa (job #3204964) | Cod sursa (job #2833914)
#include <fstream>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
vector<pair<int, int> > a[50005];
vector<int> dist(50005, INT_MAX);
bool visited[50005];
priority_queue<pair<int, int>, vector<pair<int, int> >, greater<pair<int, int> > > pq;
ifstream in("dijkstra.in");
ofstream out("dijkstra.out");
int main()
{
int n, m, x, y, z;
in >> n >> m;
for (int i = 0; i < m; i++)
{
in >> x >> y >> z;
a[x].push_back(make_pair(z, y));
}
pq.push(make_pair(0, 1));
dist[1] = 0;
while (!pq.empty())
{
pair<int, int> node = pq.top();
pq.pop();
if (visited[node.second])
continue;
visited[node.second] = true;
for (int i = 0; i < a[node.second].size(); i++)
{
if (dist[a[node.second][i].second] > dist[node.second] + a[node.second][i].first)
{
dist[a[node.second][i].second] = dist[node.second] + a[node.second][i].first;
pq.push(make_pair(dist[a[node.second][i].second], a[node.second][i].second));
}
}
}
for (int i = 2; i <= n; i++)
out << dist[i] << " ";
}