Cod sursa(job #2485329)

Utilizator greelioGreenio Greely greelio Data 1 noiembrie 2019 12:35:56
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.25 kb
#include<bits/stdc++.h>
#define pii pair<int,int>
#define x first
#define y second
#define N 50010
#define inf 1e9+1

using namespace std;

int d[N], n, m;
set<pii> S;
vector<pii>V[N];
bool inS[N];

void Dijkstra(int start) {
    d[start] = 0;
    for (int i=2; i<=n; i++) d[i] = inf;
    for (auto it:V[start]) {
        d[it.x] = min(d[it.x], it.y);
        S.insert({it.x, it.y});
    }
    S.insert({1, 0}); inS[1] = 1;
    while (S.size()) {
        auto top = *S.begin();
        int x = top.x;
        int c = top.y;
        S.erase(S.begin());
        inS[x] = 0;

        if (d[x] < c) continue;

        for (auto it:V[x]) {
            if (d[it.x] > d[x] + it.y) {
                d[it.x] = d[x] + it.y;
                if (!inS[it.x]) {
                    inS[it.x] = 1;
                    S.insert({it.x, d[it.x]});
                }
            }
        }
    }
}

int main() {
    ifstream cin("dijkstra.in");
    ofstream cout("dijkstra.out");
    cin>>n>>m;

    for (int i=0; i<m; i++) {
        int x,y, c; cin>>x>>y>>c;
        V[x].push_back({y,c});
        V[y].push_back({x,c});
    }

    Dijkstra(1);

    for (int i=2; i<=n; i++) {
        cout<<(d[i]==inf?0:d[i])<<" ";
    }

    return 0;
}