Cod sursa(job #3251509)

Utilizator iulia_morariuIuli Morariu iulia_morariu Data 26 octombrie 2024 10:20:34
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.46 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
//#include <bits/stdc++.h>
#define in fin
#define out fout
#define mkp make_pair
#define oo 1000000000
#define fr first
#define sc second
#define ll long long

using namespace std;

ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");

vector< pair<int, int> > v[50005];
ll d[50005];

signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    ll n, m; in >> n >> m;

    for(int i = 0; i < m; i++){
        ll a, b, c; in >> a >> b >> c;
        // cout << a << "  " << b << " " << c << '\n'; 
        v[a].push_back( mkp(b, c) );
    }

    priority_queue< pair<ll, int>, vector< pair<ll, int> >, greater< pair<ll, int> > > pq;
    d[1] = 0;
    for(int i = 2; i <= n; i++) d[i] = oo;

    for(int i = 0; i < v[1].size(); i++){
        d[ v[1][i].fr ] = d[1] + v[1][i].sc; 
        pq.push( mkp( d[1] + v[1][i].sc, v[1][i].fr ) );
    }

    while(!pq.empty()){
        pair<ll, int> p = pq.top(); pq.pop();
        int nod = p.sc;
        // cout << "procesam " << nod << '\n';
        for(pair<ll, int> cop : v[nod]){
            if( d[cop.fr] <= d[nod] + cop.sc ) continue;
            if( d[cop.fr] != oo ) continue;
            d[ cop.fr ] = d[nod] + cop.sc;
            pq.push( mkp( d[ cop.fr ], cop.fr ) );
        }
    }

    for(int i = 1; i <= n; i++){
        if(d[i] == oo) d[i] = 0;
    }
    for(int i = 2; i <= n; i++) out << d[i] << " ";
    out << '\n';

    return 0;
}