Cod sursa(job #3002394)

Utilizator LuciBBadea Lucian LuciB Data 14 martie 2023 18:32:27
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.31 kb
#include <bits/stdc++.h>
using namespace std;

const int NMAX = 5e4;

vector< pair<int, int> > graph[NMAX];

int dist[NMAX];
bool vis[NMAX];

priority_queue< pair<int, int>, vector< pair<int, int> >, greater< pair<int, int> > > pq;

void dijkstra(int node) {
    dist[node] = 0;
    pq.push( {0, node} );
    while(!pq.empty()) {
        int x = pq.top().second;
        int d = pq.top().first;
        pq.pop();
        if(!vis[x]) {
            vis[x] = true;
            for(auto neighbour : graph[x]) {
                if(dist[x] + neighbour.first < dist[neighbour.second]) {
                    dist[neighbour.second] = dist[x] + neighbour.first;
                    pq.push( {dist[neighbour.second], neighbour.second} );
                }
            }
        }
    }
}

int main() {
    FILE *fin, *fout;
    fin = fopen("dijkstra.in", "r");
    fout = fopen("dijkstra.out", "w");
    int n, m;
    fscanf(fin, "%d%d", &n, &m);
    for(int i = 0; i < m; i++) {
        int a, b, c;
        fscanf(fin, "%d%d%d", &a, &b, &c);
        graph[a - 1].push_back( {c, b - 1} );
    }
    for(int i = 0; i < n; i++)
        dist[i] = 2e9;
    dijkstra(0);
    for(int i = 1; i < n; i++)
        if(dist[i] == 2e9)
            fprintf(fout, "0 ");
        else fprintf(fout, "%d ", dist[i]);
    fclose(fin);
    fclose(fout);
    return 0;
}