Cod sursa(job #2969561)

Utilizator TudorMeisterDumitrescu Tudor Constantin TudorMeister Data 23 ianuarie 2023 13:47:37
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.29 kb
#include <fstream>
#include <vector>
#include <queue>
#define INF 2000000000
using namespace std;

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

struct elem
{
    int x, c;
    bool operator < (const elem &a) const
    {
        return c > a.c;
    }
};

vector <elem> a[50002];
priority_queue<elem> pq;
int sol[50002];


int main()
{
    int n,m,x,y,z,l;
    elem p;

    fin >> n >> m;


    for (int i = 1; i <= m; i++)
    {
        fin >> x >> y >> z;
        a[x].push_back({y, z});
        a[y].push_back({y, z});
    }

    for (int i = 2; i <= n; i++)
    {
        sol[i] = INF;
    }
    pq.push({1,0});

    while(!pq.empty())
    {
        p = pq.top();
        pq.pop();

        if (p.c == sol[p.x])
        {
            l = a[p.x].size();
            for (int i = 0; i < l; i++)
            {
                if (sol[a[p.x][i].x] > sol[p.x] + a[p.x][i].c)
                {
                    sol[a[p.x][i].x] = sol[p.x] + a[p.x][i].c;
                    pq.push({a[p.x][i].x, sol[a[p.x][i].x] });
                }
            }
        }
    }
    for (int i = 2; i <= n; i++)
    {
        if (sol[i] == INF)
            fout << 0 << " ";
        else
            fout << sol[i] << " ";
    }



    return 0;
}