Cod sursa(job #1922089)

Utilizator AhileGigel Frone Ahile Data 10 martie 2017 15:58:27
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.29 kb
#include<bits/stdc++.h>
using namespace std;

int const maxsize = 50010;
int const INF = 2000000000;

int n, m;
int x, y, d;
int viz[maxsize];
int dist[maxsize];
vector<pair<int, int>> v[maxsize];

auto cmp = [](pair<int, int> a, pair<int, int> b) -> bool {
        return a.first > b.first;
    };
priority_queue<pair<int, int>, vector<pair<int, int>>, decltype(cmp)> q(cmp);

int main() {

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

    scanf("%d %d", &n, &m);
    for (int i = 1; i <= m; i++) {
        scanf("%d %d %d", &x, &y, &d);
        v[x].push_back({y, d});
    }

    q.push({0, 1});
    for (int i = 2; i <= n; i++)
        dist[i] = INF;

    while (!q.empty()) {
        int node = q.top().second;
        q.pop();
        for (int i = 0; i < v[node].size(); i++) {
            int nei = v[node][i].first;
            int edgeW = v[node][i].second;
            if(edgeW + dist[node] < dist[nei] && viz[nei] == 0) {
                dist[nei] = edgeW + dist[node];
                viz[nei]++;
                q.push({dist[nei], nei});
            }
        }
    }

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