Cod sursa(job #3156263)

Utilizator lefterache_stefanLefterache Stefan lefterache_stefan Data 11 octombrie 2023 00:05:23
Problema Algoritmul lui Dijkstra Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.29 kb
#include <fstream>
#include <vector>
#include <queue>
using namespace std;

typedef pair<int, int> pi;

ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");

const int INF = 1e9 + 1;
const int MARIME = 50005;

int n, m, start = 1, dist[MARIME];

priority_queue<pi, vector<pi>, greater<pi>> pq;
vector<pi> graf[MARIME];

int main() {
    // citire si pregatire
    fin >> n >> m;
    for (int i = 1; i <= n; i++) {
        dist[i] = INF;
    }
    dist[start] = 0;
    pq.push(make_pair(start, 0));
    for (int i = 1; i <= m; i++) {
        int x, y, d;
        fin >> x >> y >> d;
        graf[x].push_back(make_pair(y, d));
        // graf[y].push_back(make_pair(x, d));
    }
    // dijkstra
    while (pq.size()) {
        int nod = pq.top().first;
        int cost = pq.top().second;
        pq.pop();
        for (size_t i = 0; i < graf[nod].size(); i++) {
            auto x = graf[nod][i];
            int vecin = x.first;
            if (cost + x.second >= dist[vecin]) {
                continue;
            }
            dist[vecin] = cost + x.second;
            pq.push(make_pair(vecin, dist[vecin]));
        }
    }
    // afisare
    for (int i = 2; i <= n; i++) {
        fout << (dist[i] == INF ? 0 : dist[i]) << ' ';
    }
    return 0;
}