Cod sursa(job #3285563)

Utilizator PetraPetra Hedesiu Petra Data 13 martie 2025 10:21:22
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>

#define NMAX 50003
#define inf 0x3f3f3f3f
#define mp make_pair
#define nod first
#define dist second

using namespace std;

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

struct q_entry {
    int nod;
    long long dist;
};
bool operator< (q_entry a, q_entry b)
{
    return a.dist > b.dist;
}

vector<q_entry> G[NMAX];
priority_queue<q_entry> q;
int n, m;
bool viz[NMAX];
long long dist[NMAX];

void dijkstra(int start)
{
    if (viz[start]) return;
    q.push({start, 0});

    while (!q.empty())
    {
        q_entry c = q.top();
        q.pop();

        if (viz[c.nod]) continue;
        viz[c.nod] = true;
        dist[c.nod] = c.dist;
        for (auto it : G[c.nod])
        {
            if (viz[it.nod]) continue;
            q.push({it.nod, c.dist + it.dist});
        }
    }

}

int main()
{
    fin >> n >> m;
    for (int i = 1; i <= m; i++)
    {
        int x, y, c;
        fin >> x >> y >> c;
        G[x].push_back({y, c});
        G[y].push_back({x, c});
    }
    dijkstra(1);
    for (int i = 2; i <= n; i++)
        fout << dist[i] << " ";
    return 0;
}