Cod sursa(job #2695327)

Utilizator StefanaArinaStefana Arina Tabusca StefanaArina Data 12 ianuarie 2021 15:00:27
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.43 kb
#include<iostream>
#include<fstream>
#include<queue>
 
using namespace std;
 
#define INF 1000000005
#define NMAX 300005
 
priority_queue< pair<int,int> > myheap; 
vector< pair<int, int> > graph[NMAX];
 
int n, m, dist[NMAX];
bool viz[NMAX];

ifstream("dijkstra.in");
ofstream("dijkstra.out");
 
int main()
{
    int a, b, c;

    
    cin >> n >> m;
    for(int i = 1; i <= m; i++) {
        cin >> a >> b >> c;
        graph[a].push_back(make_pair(b, c));
    }
    
    myheap.push(make_pair(0, 1));
    dist[1] = 0;
    for(int i = 2; i <= n; i++) {
        dist[i] = INF;
        viz[i] = false;
    }
    
    while(!myheap.empty()) {
        pair<int, int> best = myheap.top();
        myheap.pop();
     
        int current_node = best.second;
        if(viz[current_node]) {
            continue;
        }
        viz[current_node] = true;
        
        for(auto edge : graph[current_node]) {
            int neight = edge.first;
            int cost = edge.second;

            if(dist[neight] > dist[current_node] + cost) {
                dist[neight] = dist[current_node] + cost;
                myheap.push(make_pair(-dist[neight], neight));
            }
        }
    }
    
    for(int i = 2; i <= n; i++) {
        if(dist[i] == INF) {
            printf("0 ");
        }
        else {
            printf("%d ", dist[i]);
        }
    }
    printf("\n");
    
    return 0;
}