Cod sursa(job #2833914)

Utilizator soriynSorin Rita soriyn Data 15 ianuarie 2022 23:20:00
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#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] << " ";
}