Cod sursa(job #3250323)

Utilizator marinaluca2008Marina Luca Stefan marinaluca2008 Data 20 octombrie 2024 11:14:14
Problema Algoritmul lui Dijkstra Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.57 kb
#include <bits/stdc++.h>

#pragma GCC optimize ("O3")
#pragma GCC optimize ("fast-math")
#pragma GCC optimize ("unroll-loops")

using namespace std;
#define int long long
#define ll long long
#define all (x) begin(x), end (x)
#define xx first
#define yy second
#define INF (1 << 30)

#define cin fin
#define cout fout

ifstream cin ("dijkstra.in");
ofstream cout ("dijkstra.out");


using pii = pair <int, int>;
using tii = tuple <int, int, int>;

int n, m;
int a, b, c;

constexpr int NMAX = (int) 25e4;
constexpr int VMAX = (int) 5e4;

vector <pii> v[NMAX + 1];
vector <int> dp(VMAX + 1, INF);
array <bool, VMAX + 1> fr;

inline void bfs (int nod)
{
    priority_queue <pii, vector <pii>, greater <pii>> pq;
    pq.push(make_pair (0, nod));
    dp[nod] = 0;
    while (!pq.empty())
    {
        nod = pq.top().second;
        pq.pop();
        if(fr[nod])
            continue;
        fr[nod] = 1;
        for (auto elem : v[nod]){
            int val = elem.first;
            int val1 = elem.second;
            if (dp[nod] + val1 < dp[val])
            {
                dp[val] = val1 + dp[nod];
                pq.push(make_pair(dp[val], val));

            }
        }
    }
}
signed main(void)
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    cin >> n >> m;
    for (int i = 1; i <= m; ++ i){
        cin >> a >> b >> c;
        v[a].push_back(make_pair (b, c));
    }
    bfs (1);
    for (int i = 2; i <= n; ++ i)
    {
        if (dp[i] != INF)
        {
            cout << dp[i] << ' ';
        }
        else
            cout << " 0 ";
    }
    return 0;
}