Cod sursa(job #3323976)

Utilizator pk360Sandulescu Ioan pk360 Data 20 noiembrie 2025 17:08:40
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.45 kb
#include <bits/stdc++.h>
using namespace std;

#define inf 200000000

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

vector<vector<pair<int,int>>> graf;
vector<int> d, tata, q;

int sel_min (int n, int s) {
    int u_min = s, c_min = inf;
    for (int i = 0; i < n; i++) {
        if (c_min > d[i] && q[i]) {
            c_min = d[i];
            u_min = i;
        }
    }
    return u_min;
}

bool checkempty(vector<int>& q, int n) {
    bool isempty = true;
    for (int i = 0; i < n; i++) {
        if (q[i] != 0) { isempty = false; break; }
    }
    return isempty;
}

void dijkstra(int n, int m, int s) {
    q.assign(n, 1);
    d.assign(n, inf); d[s] = 0;
    tata.assign(n, 0); tata[s] = -1;

    int u;
    while (!checkempty(q, n)) {
        u = sel_min(n, s);
        q[u] = 0;
        if (graf[u].empty()) { continue; }

        for (pair<int, int> m : graf[u]) {
            if (d[m.first] > d[u] + m.second) {
                d[m.first] = d[u] + m.second;
                tata[m.first] = u;
            }
        }
    }
}

int main() {
    int n, m, s = 0; fin >> n >> m;
    graf.resize(n);

    for (int i = 0; i < m; i++) {
        int x, y, c; fin >> x >> y >> c; x--; y--;
        graf[x].push_back(pair<int,int>(y, c));
    }

    dijkstra(n, m, 0);

    for (int u = 0; u < n; u++) {
        if (tata[u]+1 != 0) {
            cout << d[u] << " ";
        }
    }

    return 0;
}