Cod sursa(job #2515733)

Utilizator mirceatlxhaha haha mirceatlx Data 29 decembrie 2019 14:41:58
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.23 kb
#include <iostream>
#include <fstream>
#include <queue>
#include <vector>
#include <algorithm>
#define NMAX 50005
#define INF (1 << 30)
using namespace std;

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

int N, M;
vector < pair <int,int> > Add[NMAX];
vector <int> dist(NMAX,INF);
priority_queue < pair <int,int> , vector < pair <int,int> >, greater < pair <int,int> > > pq;

void shortPath(int start)
{
    int lgx;
    int currNode;
    pq.push({0,start});
    dist[start] = 0;
    while(!pq.empty())
    {
        currNode = pq.top().second;
        lgx = Add[currNode].size();
        pq.pop();
        for(int i = 0; i < lgx; i++){
            if(dist[currNode] + Add[currNode][i].second < dist[Add[currNode][i].first]){
                dist[Add[currNode][i].first] = dist[currNode] + Add[currNode][i].second;
                pq.push({dist[currNode] + Add[currNode][i].second,Add[currNode][i].first});
            }
        }
    }
}

int main()
{
    int x, y, w;
    fin >> N >> M;
    for(int i = 1; i <= M; i++){
        fin >> x >> y >> w;
        Add[x].push_back({y,w});
    }
    shortPath(1);
    for(int i = 2; i <= N; i++){
        fout << dist[i] << " ";
    }
    return 0;
}