Cod sursa(job #2207549)

Utilizator Corneliu10Dumitru Corneliu Corneliu10 Data 25 mai 2018 22:20:33
Problema Algoritmul lui Dijkstra Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <iostream>
#include <vector>
#include <set>
#include <cstdio>

#define NMAX 50010
#define inf 1<<30

using namespace std;

int dist[NMAX], N, M;
vector<int> G[NMAX],C[NMAX];

void Dijkstra(int nodStart) {
    for(int i=1;i<=N;i++)
        dist[i] = inf;

    dist[nodStart] = 0;
    set<pair<int, int> > T;
    T.insert({nodStart, 0});

    while(!T.empty()) {
        int nod = (*T.begin()).first;
        int val = (*T.begin()).second;
        T.erase(T.begin());

        for(int i=0;i < G[nod].size(); i++) {
            if(dist[G[nod][i]] > val + C[nod][i]) {
                dist[G[nod][i]] = C[nod][i] + val;
                T.insert({G[nod][i], C[nod][i] + val});
            }
        }
    }
}

int main()
{
    int a, b, c;
    freopen("dijkstra.in","r",stdin);
    freopen("dijkstra.out","w",stdout);

    cin>>N>>M;
    for(int i=0; i< M;i++) {
        cin>>a>>b>>c;
        G[a].push_back(b);
        C[a].push_back(c);
    }

    Dijkstra(1);
    for(int i=2;i<=N;i++) {
        if(dist[i]==inf) dist[i] = 0;
        cout<<dist[i]<<" ";
    }
}