Cod sursa(job #2135254)

Utilizator alittlezzCazaciuc Valentin alittlezz Data 18 februarie 2018 18:33:56
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <bits/stdc++.h>
using namespace std;
#define ll long long

const int N = 5e4 + 5;
const int INF = 1e9 + 1;

priority_queue < pair < int, int >, vector<pair<int, int>>, greater<pair<int, int>> > pq;
vector < pair < int, int > > edge[N];
int dp[N];

int main(){
    freopen("dijkstra.in", "r", stdin);
    freopen("dijkstra.out", "w", stdout);
    int n, m;
    scanf("%d %d", &n, &m);
    for(int i = 1;i <= m;i++){
        int x, y, w;
        scanf("%d %d %d", &x, &y, &w);
        edge[x].push_back({y, w});
        edge[y].push_back({x, w});
    }
    for(int i = 1;i <= n;i++){
        dp[i] = INF;
    }
    dp[1] = 0;
    pq.push({0, 1});
    while(pq.empty() == false){
        int node = pq.top().second;
        pq.pop();
        for(auto &it : edge[node]){
            if(dp[it.first] > dp[node] + it.second){
                dp[it.first] = dp[node] + it.second;
                pq.push({dp[it.first], it.first});
            }
        }
    }
    for(int i = 2;i <= n;i++){
        printf("%d ", dp[i] == INF ? 0 : dp[i]);
    }
    return 0;
}