Cod sursa(job #2614834)

Utilizator TherevengerkingSurani Adrian Therevengerking Data 12 mai 2020 18:58:12
Problema Algoritmul lui Dijkstra Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.22 kb
#include <bits/stdc++.h>

using namespace std;

#define pb push_back
#define Nmax 50005
#define x first
#define y second

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

vector<pair<int, int>> v[Nmax];

priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> q;
bitset<Nmax> inq;

int n, m;
int dp[Nmax];

int main()
{
    fin >> n >> m;

    for (int i = 1, a, b, c; i <= m; ++i)
    {
        fin >> a >> b >> c;
        v[a].pb({b, c});
    }

    for (int i = 1; i <= n; ++i)
        dp[i] = 1 << 30;

    // cout << "\n_______\n";

    inq[1] = 1;
    dp[1] = 0;
    q.push({0, 1});

    while (!q.empty())
    {
        int node = q.top().y;
        int cost = dp[node];
        // cout << node << ':';
        inq[node] = 0;
        q.pop();

        for (auto i : v[node])
        {
            if (dp[i.x] > cost + i.y)
            {
                dp[i.x] = cost + i.y;
                if (!inq[i.x])
                {
                    // cout << i.x << ' ';
                    q.push({dp[i.x], i.x});
                }
            }
        }
    }

    for (int i = 2; i <= n; ++i)
    {
        if (dp[i] == 1 << 30)
            dp[i] = 0;

        fout << dp[i] << ' ';
    }
    return 0;
}