Cod sursa(job #1914010)

Utilizator MailatMailat Radu Mailat Data 8 martie 2017 15:07:17
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <bits/stdtr1c++.h>
#define INF 16e5
#define maxn 500001
using namespace std;

ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");

vector < pair <int, int> > A[maxn];
vector < pair <int, int> > ::iterator it;
set <pair <int, int> > h;
int D[maxn];
int N, M, x0 = 1;

void init() {
    int x, y, c;
    fin >> N >> M;
    for(int i=0; i < M; i++) {
        fin >> x >> y >> c;
        A[x].push_back(make_pair(y,c));
    }
    for(int i=1; i<=N; i++) D[i] = INF;
    D[x0] = 0;
}

void dijkstra() {
    int node, to, cost;
    h.insert(make_pair(0,x0));
    while(!h.empty()) {
        node = h.begin()->second;
        h.erase(h.begin());
        for(it = A[node].begin(); it != A[node].end(); ++it) {
            to = it->first;
            cost = it->second;
            if(D[to] > D[node] + cost) {
                if(D[to] != INF) h.erase(h.find(make_pair(D[to], to)));
                D[to] = D[node] + cost;
                h.insert(make_pair(D[to], to));
            }
        }
    }

}

int main()
{
    init();
    dijkstra();
    for(int i=2; i <= N; i++ ){
        fout << D[i] << " ";
    }
    return 0;
}