Cod sursa(job #3030822)

Utilizator mucel29Asavoae Cosmin-Stefan mucel29 Data 17 martie 2023 21:49:30
Problema Algoritmul lui Dijkstra Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.68 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>

using namespace std;

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

const int NMax = 5e4 + 5;
const int inf = 1 << 30;

vector<pair<int, int>> graf[NMax];
int d[NMax];
bool inCoada[NMax];

struct comparatie
{
    bool operator()(int x, int y)
    {
        return d[x] < d[y];
    }
};

priority_queue<int, vector<int>, comparatie> coada;

int N, M;//, P;

void citire()
{
    fin >> N >> M;
    for (int i = 0; i < M; i++)
    {
        int x, y, c;
        fin >> x >> y >> c;
        graf[x].push_back(make_pair(y, c));
    }
    // while(fin >> x)
    // {
    //     fin >> y >> c;
    //     graf[x].push_back(make_pair(y, c));
    // }
}

void dijkstra(int start)
{
    for (int i = 1; i <= N; i++)
        d[i] = inf;
    d[start] = 0;
    coada.push(start);
    inCoada[start] = true;
    while (!coada.empty())
    {
        int curr = coada.top();
        coada.pop();
        inCoada[curr] = false;
        for (size_t i = 0; i < graf[curr].size(); i++)
        {
            int vecin = graf[curr][i].first;
            int cost = graf[curr][i].second;
            if (d[curr] + cost < d[vecin])
            {
                d[vecin] = d[curr] + cost;
                if (!inCoada[vecin])
                {
                    coada.push(vecin);
                    inCoada[vecin] = true;
                }
            }
        }
    }
}

int main()
{
    citire();
    dijkstra(1);
    for (int i = 2; i <= N; i++)
    {
        if (d[i] == inf)
            fout <<"0 ";
        else
            fout << d[i] << " "; 
    }
}