Cod sursa(job #2861142)

Utilizator norryna07Alexandru Norina norryna07 Data 3 martie 2022 16:34:04
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.28 kb
#include <fstream>
#include <vector>
#include <queue>
#include <bitset>
#define cost first
#define nod second
#define oo (int)2e9+2
using namespace std;

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

vector < vector <pair<int, int> > > g;
priority_queue < pair<int, int> > q;
vector <int> d;
bitset <50005> viz;
int n, m;

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


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

    }
}

void afisare()
{
    for (int i=2; i<=n; ++i)
        if (d[i]==oo) fout<<"0 ";
        else fout<<d[i]<<' ';
}

int main()
{
    citire();
    dijkstra(1);
    afisare();
    return 0;
}