Cod sursa(job #2906552)

Utilizator norryna07Alexandru Norina norryna07 Data 26 mai 2022 16:50:20
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.11 kb
#include <fstream>
#include <vector>
#include <queue>
#include <bitset>
#define nod second
#define cost first
#define oo (int)2e9
using namespace std;

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

vector < pair<int, int> > g[50003];
bitset <50003> viz;
int d[50003];
priority_queue < pair<int, int> > q;
int n, m, st;

void citire()
{
    int x, y, c;
    fin>>n>>m>>st;
    for (int i=1; i<=m; ++i)
    {
        fin>>x>>y>>c;
        g[x].push_back({c, y});
        //g[y].push_back({c, x});
    }
    fin.close();
}

void dijkstra()
{
    for (int i=1; i<=n; ++i) d[i]=oo;
    d[st]=0;
    q.push({0, st});
    while (!q.empty())
    {
        int u=q.top().nod;
        q.pop();
        if (viz[u]==0)
        {
            viz[u]=1;
            for (auto v:g[u])
                if (d[v.nod]>d[u]+v.cost)
                {
                    d[v.nod]=d[u]+v.cost;
                    q.push({-d[v.nod], v.nod});
                }
        }
    }
}

int main()
{
    citire();
    dijkstra();
    for (int i=1; i<=n; ++i) fout<<d[i]<<' ';
    return 0;
}