Cod sursa(job #3241924)

Utilizator CondoracheAlexandruCondorache Alexandru CondoracheAlexandru Data 6 septembrie 2024 11:48:44
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.37 kb
#include <bits/stdc++.h>
#define ll long long
#define pb push_back
#define F first
#define S second
#define endl '\n'
#define all(a) (a).begin(),(a).end()
using namespace std;
const ll maxn = 250005;
 
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");

void dijkstra(ll source, const vector<vector<pair<ll, ll>>>& adj, vector<ll>& dist, vector<ll>& prev) {
    dist[source] = 0;
    set<pair<ll, ll>> q;
    q.insert({0, source});
    while (!q.empty()) {
        ll v = q.begin()->second;
        q.erase(q.begin());
        for (auto u : adj[v]) {
            ll node = u.F;
            ll distance = u.S;
            if (dist[v] + distance < dist[node]) {
                q.erase({dist[node], node});
                dist[node] = dist[v] + distance;
                prev[node] = v;
                q.insert({dist[node], node});
            }
        }
    }
}

void solve() {
    ll n, m;
    fin >> n >> m;
    vector<vector<pair<ll, ll>>> adj(maxn, vector<pair<ll, ll>>());
    while (m--) {
        ll x, y, c;
        fin >> x >> y >> c;
        x--;
        y--;
        adj[x].pb({y, c});
    }
    vector<ll> dist(n, maxn), prev(n, -1);
    dijkstra(0, adj, dist, prev);
    for (auto v : dist) {
        if (v == 0) continue;
        fout << v << " ";
    }
    fout << endl;
}
 
int main() {
    ll t = 1;
//    cin >> t;
    while (t--) {
        solve();
    }
    return 0;
}