Mai intai trebuie sa te autentifici.

Cod sursa(job #2801176)

Utilizator DavidLDavid Lauran DavidL Data 15 noiembrie 2021 12:03:47
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fi("dijkstra.in");
ofstream fo("dijkstra.out");

const int NMAX = 50005;
const int INF = 1e9 + 5;

int n, m;
vector <pair<int, int>> G[NMAX];
int dist[NMAX];

void dijkstra() {
    for (int i = 1; i <= n; i++)
        dist[i] = INF;

    priority_queue <pair<int, int>> Q;

    Q.push({0, 1});
    dist[1] = 0;

    while (!Q.empty()) {
        int nod = Q.top().second;

        if (-Q.top().first != dist[nod]) {
            Q.pop(); continue;
        }

        Q.pop();

        for (auto v: G[nod])
            if (dist[nod] + v.second < dist[v.first]) {
                dist[v.first] = dist[nod] + v.second;
                Q.push({-dist[v.first], v.first});
            }
    }
}

int main()
{
    fi >> n >> m;
    for (int i = 1; i <= m; i++) {
        int u, v, c; fi >> u >> v >> c;
        G[u].push_back({v, c});
    }

    dijkstra();

    for (int i = 2; i <= n; i++)
        if (dist[i] != INF)
            fo << dist[i] << " ";
        else
            fo << 0 << " ";

    return 0;
}