Cod sursa(job #1838973)

Utilizator msciSergiu Marin msci Data 2 ianuarie 2017 02:58:20
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.31 kb
#include <bits/stdc++.h>

using namespace std;

#define SIZE(x) ((int) (x).size())
#define ALL(x) (x).begin(), (x).end()

typedef long long int64; typedef unsigned long long uint64;
static const int INF = 0x3f3f3f3f; static const long long INFL = 0x3f3f3f3f3f3f3f3fLL;

const int NMAX = 50005;

vector<pair<int, int>> adj[NMAX];
int dist[NMAX];

void dijkstra(int source) {
    dist[source] = 0;
    set<pair<int, int>> q;
    q.insert({dist[source], source});
    while (!q.empty()) {
        int u = q.begin()->second, du = q.begin()->first;
        q.erase(q.begin());
        if (dist[u] < du) continue;
        for (pair<int, int>& e : adj[u]) {
            int v = e.second, w = e.first;
            if (dist[v] > dist[u] + w) {
                dist[v] = dist[u] + w;
                q.insert({dist[v], v});
            }
        }
    }
}

int main() {
    freopen("dijktra.in", "r", stdin);
    freopen("dijkstra.out", "w", stdout);
    int N, M; cin >> N >> M;
    for (int i = 0; i < M; i++) {
        int x, y, w; cin >> x >> y >> w;
        adj[x].push_back({w, y});
    }
    memset(dist, INF, sizeof(dist));
    dijkstra(1);
    for (int i = 1; i <= N; i++) if (dist[i] == INF) dist[i] = 0;
    int num = 0;
    for (int i = 2; i <= N; i++) {
        if (num++) cout << " ";
        cout << dist[i];
    }
    cout << endl;
}