Cod sursa(job #2646489)

Utilizator DormeoNoapte Buna Dormeo Data 1 septembrie 2020 12:56:17
Problema Algoritmul lui Dijkstra Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include <bits/stdc++.h>

using namespace std;

const int DIM = 50000 + 5;

vector < pair < int, int > > a[DIM];
vector < int > d(DIM, 2e9);
priority_queue < pair < int, int >, vector < pair < int, int > >, greater < pair < int, int > > > pq;

void dijkstra(int k, int n)
{
    d[1] = 0;
    pq.push({d[1], 1});

    while(!pq.empty()) {
        int k = pq.top().second;

        pq.pop();

        for(auto v : a[k]) {
            int to = v.first;
            int len = v.second;

            if(d[to] > d[k] + len) {
                d[to] = d[k] + len;
                pq.push({d[to], to});
            }
        }
    }

    for(int i = 2; i <= n; ++i) {
        if(d[i] == 2e9) printf("0 ");
        else printf("%d ", d[i]);
    }
}

int main()
{
    freopen("dijkstra.in", "r", stdin);
    freopen("dijkstra.out", "w", stdout);

    int n, m;

    scanf("%d%d", &n, &m);
    for(int i = 1; i <= m; ++i) {
        int x, y, w;

        scanf("%d%d%d", &x, &y, &w);

        a[x].push_back({y, w});
    }

    dijkstra(1, n);

    return 0;
}