Cod sursa(job #2432725)

Utilizator andreisontea01Andrei Sontea andreisontea01 Data 24 iunie 2019 20:59:19
Problema Algoritmul lui Dijkstra Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.11 kb
#include <bits/stdc++.h>

using namespace std;

const int MAXN = 50005, MAXM = 250005;

#define fr first
#define sec second

priority_queue<pair<int, int> > pq;
vector<pair<int, int> > graf[MAXN];
int ans[MAXN];

int main()
{
    ifstream fin("dijkstra.in");
    ofstream fout("dijkstra.out");
    int n, m, a, b, c;
    fin >> n >> m;
    for(int i = 1; i <= m; ++i){
        fin >> a >> b >> c;
        graf[a].push_back(make_pair(b, c));
    }
    for(int i = 2; i <= n; ++i) ans[i] = 1e9;
    pq.push(make_pair(1, ans[1]));
    while(!pq.empty()){
        int nod = pq.top().fr, cost = pq.top().sec;
        pq.pop();
        if(ans[nod] != cost) continue;
        for(int i = 0; i < int(graf[nod].size()); ++i){
            if(cost + graf[nod][i].sec < ans[graf[nod][i].fr]){
                ans[graf[nod][i].fr] = cost + graf[nod][i].sec;
                pq.push(make_pair(graf[nod][i].fr, ans[graf[nod][i].fr]));
            }
        }
    }
    for(int i = 2; i <= n; ++i){
        if(ans[i] != 1e9) fout << ans[i];
        else fout << 0;
        fout << " ";
    }
    return 0;
}