Cod sursa(job #3029971)

Utilizator cberindeCodrin Berinde cberinde Data 17 martie 2023 12:29:08
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.41 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");

int N, M;
vector<pair<int, int>> adi[50001];
bool vizi[50001];
int dist[50001];

struct cuba {
    int nod, cost;
    bool operator < (const cuba &ceva) const {
        return ceva.cost < cost;
    }
};

priority_queue<cuba> q;

void dijkstra() {
    while(!q.empty()) {
        int nodcrt = q.top().nod;
        vizi[nodcrt] = true;
        q.pop();
        cuba a;
        for(auto nou : adi[nodcrt]) {
            if(!vizi[nou.first] && dist[nou.first] > dist[nodcrt] + nou.second) {
                a.nod = nou.first;
                dist[nou.first] = dist[nodcrt] + nou.second;
                a.cost = dist[nou.first];
                q.push(a);

            }
        }
    }
}

int main() {
    fin >> N >> M;
    int a, b, c;
    for(int i = 1; i <= M; i++) {
        fin >> a >> b >> c;
        adi[a].push_back(make_pair(b, c));
        adi[b].push_back(make_pair(a, c));
    }

    for(int i = 1; i <= N; i++) {
        dist[i] = INT_MAX;
    }
    dist[1] = 0;
    vizi[1] = true;
    cuba start;
    start.nod = 1;
    start.cost = 0;
    q.push(start);
    dijkstra();
    for(int i = 2; i <= N; i++) {
        if(dist[i] == INT_MAX) {
            fout << "0 ";
        }
        else {
            fout << dist[i] << " ";
        }
    }
    return 0;
}