Cod sursa(job #2970447)

Utilizator sandry24Grosu Alexandru sandry24 Data 25 ianuarie 2023 10:04:01
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.25 kb
#include <bits/stdc++.h>
using namespace std;
 
typedef long long ll;
typedef vector<int> vi;
typedef pair<int, int> pi;
#define pb push_back
#define mp make_pair
#define f first
#define s second

int n, m;
vector<vector<pi>> adj(100001);
int dist[100001];

void Dijkstra(ll x){
    dist[x] = 0;
    set<pi> s;
    s.insert({0, x});
    while(!s.empty()){
        int a = s.begin()->s;
        // cout << a << "\n";
        s.erase(s.begin());
        for(auto u : adj[a]){
            int b = u.f, w = u.s;
            if(dist[a] + w < dist[b]){
                s.erase({dist[b], b});
                dist[b] = dist[a] + w;
                s.insert({dist[b], b});
            }
        }
    }
}
 
void solve(){
    cin >> n >> m;
    for(int i = 0; i <= 100001; i++)
        dist[i] = 2e9;
    for(int i = 0; i < m; i++){
        int a, b, w;
        cin >> a >> b >> w;
        adj[a].pb({b, w});
    }
    Dijkstra(1);
    for(int i = 2; i <= n; i++)
        cout << (dist[i] == 2e9 ? 0 : dist[i]) << ' ';
}  
 
int main(){
    freopen("dijkstra.in", "r", stdin);
    freopen("dijkstra.out", "w", stdout);
    ios::sync_with_stdio(0); cin.tie(0);
    int t = 1;
    //cin >> t;
    while(t--){
        solve();
    }
}