Cod sursa(job #2130963)

Utilizator adiXMGemene Adrian adiXM Data 14 februarie 2018 09:43:16
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.37 kb
#include <bits/stdc++.h>

using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
const int nMax = 50005;
const int inf = 1e9;
struct Val {
    int node, cost;
    inline bool operator < (const Val &A) const {
        return A.cost < cost;
    }
};
priority_queue <Val> Q;
vector <Val> G[nMax];
int dp[nMax];
inline void Dij(int start) {
    Val qvals;
    qvals.node = start;
    qvals.cost = 0;
    Q.push(qvals);
    dp[start] = 0;
    while(!Q.empty()) {
        int nod = Q.top().node;
        int cst = Q.top().cost;
        Q.pop();
        for(const auto &v : G[nod]) {
            if(dp[v.node] > dp[nod] + v.cost) {
                dp[v.node] = dp[nod] + v.cost;
                qvals.node = v.node;
                qvals.cost = dp[v.node];
                Q.push(qvals);
            }
        }
    }
}
int main()
{
    int n, m, x, y, c;
    f >> n >> m;
    Val ins;
    for(int i = 1; i <= m; i++) {
        f >> x >> y >> c;
        ins.node = y;
        ins.cost = c;
        G[x].push_back(ins);
        ins.node = x;
        G[y].push_back(ins);
    }
    for(int i = 1; i <= n; i++) {
        dp[i] = inf;
    }
    Dij(1);
    for(int i = 2; i <= n; i++) {
        if(dp[i] == inf) {
            g << "0 ";
            continue;
        }
        g << dp[i] << " ";
    }
    g << "\n";
    return 0;
}