Cod sursa(job #1559585)

Utilizator DanielRusuDaniel Rusu DanielRusu Data 31 decembrie 2015 10:41:46
Problema Algoritmul lui Dijkstra Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <cstdio>
#include <iostream>
#include <vector>
#include <set>

using namespace std;

#define DIM 50005

int N, M, x, y, lg, distmin[DIM];
int visited[DIM];
vector <vector <pair <int, int> > > Graph;
set <pair <int, int> > rs;

void Dijkstra(int nod);

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

    scanf("%d %d\n", &N, &M);

    Graph.resize(N + 1);

    for(int i = 1; i <= M; ++i) {
        scanf("%d %d %d\n", &x, &y, &lg);

        Graph[x].push_back(make_pair(y, lg));
    }

    for(int i = 2; i <= N; ++i) {
        distmin[i] = 2e8;
    }

    Dijkstra(1);

    for(int i = 2; i <= N; ++i) {
        cout << (distmin[i] == 2e8 ? 0 : distmin[i]) << ' ';
    }

    cout << '\n';

    return 0;
}

void Dijkstra(int nod) {
    visited[nod] = 1;

    for(auto x: Graph[nod]) {
        if(distmin[x.first] > distmin[nod] + x.second) {
            distmin[x.first] = distmin[nod] + x.second;
            Dijkstra(x.first);
        }
    }
}