Cod sursa(job #3326303)

Utilizator D4R1U5Sava Darius D4R1U5 Data 28 noiembrie 2025 01:35:37
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.26 kb
#include <fstream>
#include <vector>
#include <queue>
#include <algorithm>

using namespace std;

ifstream f("dijkstra.in");
ofstream g("dijkstra.out");

const int MAXN = 50000;

int n, m;
vector<pair<int,int>> adj[MAXN + 5];

vector<int> Dijkstra (int start, vector<int> &tata){
    priority_queue<pair<int,int>, vector<pair<int,int>>, greater<pair<int,int>>> q;

    vector <int> d(n+1, 1e9);
    vector <bool> viz(n+1, false);

    d[start]=0;
    q.push({0, start});

    while (!q.empty()){
        auto [dist, u] = q.top();
        q.pop();

        if (viz[u]==true) continue;

        viz[u]=true;

        for (auto &edge : adj[u]){
            int v=edge.first;
            int cost=edge.second;
            if (d[u]+cost<d[v]){
                d[v]=d[u]+cost;
                tata[v]=u;
                q.push({d[v], v});
            }
        }
    }

    return d;
}

int main() {
    f>>n>>m;

    for (int i=1;i<=m;i++) {
        int x, y, c;
        f>>x>>y>>c;
        adj[x].push_back({y, c});
    }

    vector<int> tata(n+1, 0);
    vector<int> dist = Dijkstra(1, tata);

    for (int i=2;i<=n;i++) {
        if (dist[i]==1e9) g<<0<<" ";
        else g<<dist[i]<<" ";
    }
    g<<"\n";
    return 0;
}