Cod sursa(job #3324839)

Utilizator D4R1U5Sava Darius D4R1U5 Data 23 noiembrie 2025 18:05:25
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.27 kb
#include <fstream>
#include <vector>
#include <queue>
#include <algorithm>

using namespace std;

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

const int MAXN = 200000;

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

vector<long long> Dijkstra(int start) {
    vector<long long> d(n+1, 1e18);
    vector<bool> viz(n+1, false);

    priority_queue<pair<long long,int>, vector<pair<long long,int>>, greater<pair<long long,int>>> q;
    d[start]=0;
    q.push({0, start});

    while(!q.empty()) {
        auto p=q.top();
        q.pop();
        int u=p.second;
        long long dist_u=p.first;

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

        for(auto &edge : adj[u]) {
            int v=edge.first;
            int cost_edge=edge.second;
            if(d[v]>dist_u+cost_edge) {
                d[v]=dist_u+cost_edge;
                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});
    }

    int start=1;
    vector<long long> dist = Dijkstra(start);

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

    return 0;
}