Cod sursa(job #2105518)

Utilizator BaldurCronos Baldur Data 13 ianuarie 2018 15:18:23
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.37 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <bitset>
#include <cstring>
#define N 50005
#define node first
#define cost second
#define INF (1LL << 61)
using namespace std;
ifstream in("dijkstra.in");
ofstream out("dijkstra.out");
vector<pair<int,int> > g[N];
bitset<N> v;
long long d[N];
int n, m;

void dijkstra() {
        long long mn;
        int visited_nodes = 0, crnode;
        fill(d + 1, d + n + 1, INF);
        d[1] = 0;

        for (int i = 1; i <= n; i++) {
                mn = INF + 1;
                for (int j = 1; j <= n; j++) {
                        if (d[j] < mn && !v[j]) {
                                mn = d[j];
                                crnode = j;
                        }
                }
                v[crnode] = 1;

                for (int j = 0; j < g[crnode].size(); j++) {
                        if (!v[g[crnode][j].node])
                                d[g[crnode][j].node] = min(d[g[crnode][j].node], d[crnode] + g[crnode][j].cost);
                }
        }
}

int main() {
        in >> n >> m;
        int a, b, c;
        for (int i = 1; i <= m; i++) {
                in >> a >> b >> c;
                g[a].push_back(make_pair(b, c));
        }

        dijkstra();

        for (int i = 2; i <= n; i++)
                out << d[i] << " ";
        return 0;
}