Cod sursa(job #3183697)

Utilizator picalexPicioroaga Alexandru picalex Data 12 decembrie 2023 18:46:31
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.14 kb
#include <fstream>
#include <iostream>
#include <queue>
#include <vector>
#define MAX 50001
#define INF 20001
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");

vector<pair<int,int>> v[MAX];
int dist[MAX];
bool prelucrat[MAX];

void dijkstra(int nod)
{
    priority_queue<pair<int,int>> q;
    q.push({ 0,nod });
    while(!q.empty())
    {
        int a = q.top().second;
    	q.pop();
        if (prelucrat[a])
            continue;
        prelucrat[a] = true;
        for(int i=0;i<v[a].size();i++)
        {
            int b = v[a][i].first;
            int c = v[a][i].second;
            if(dist[a]+c < dist[b])
            {
                dist[b] = dist[a] + c;
                q.push({ dist[b],b});
            }
        }
    }
}

int main()
{
    int n, m;
    fin >> n >> m;
    for(int i=0;i<m;i++)
    {
        int a, b, c;
        fin >> a >> b >> c;
        v[a].push_back({ b,c });
    }
    for (int i = 1; i <= n; i++)
        dist[i] = INF;
    dist[1] = 0;

    dijkstra(1);
    for (int i = 2; i <= n; i++)
        fout << dist[i] << " ";
    return 0;
}