Cod sursa(job #1901301)

Utilizator RaresEGaySopterean Adrian RaresEGay Data 3 martie 2017 21:01:30
Problema Algoritmul lui Dijkstra Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#define INF 0x3f3f3f3f
#define maxn 50005
#define maxm 250005


using namespace std;

ifstream f("dijkstra.in");
ofstream g("dijkstra.out");

vector < pair<int, int> > v[maxn];
priority_queue < pair <int, int > > pq;

int n, m;
int dist[maxn];

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

    dist[1] = 0;
    pq.push(make_pair(dist[1], 1));

    while(!pq.empty()){
        int u = pq.top().second;
        pq.pop();

        for(int i = 0; i < v[u].size(); ++i){
            int nod = v[u][i].first;
            int distance = v[u][i].second;

            if(dist[nod] > dist[u] + distance){
                dist[nod] = dist[u] + distance;
                pq.push(make_pair(dist[nod], nod));
            }
        }
    }
}



int main(){

    f >> n >> m;
    for(int i = 1; i <= m; ++i){
        int x, y, d;
        f >> x >> y >> d;
        v[x].push_back(make_pair(y, d));
    }

    dijkstra();
    for(int i = 2; i <= n; ++i){
        if(dist[i] == INF) g << 0 << ' ';
        else g << dist[i] << ' ';
    }

}