Cod sursa(job #2855697)

Utilizator Maniu_DianaManiu Maria Diana Maniu_Diana Data 22 februarie 2022 19:49:46
Problema Algoritmul lui Dijkstra Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.52 kb
#include <bits/stdc++.h>

using namespace std;

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

int n, m;
int dmin[50005];

struct el
{
    int nod, cost;
    bool operator < (const el &A) const ///retin ca am de doua ori const (mai mult decat constanta hehe:)
    {
        return cost > A.cost;
    }
};

priority_queue < el > Q;

vector < el > L[50005];

void read()
{
    int x;
    el y;
    fin >> n >> m;
    for(int i = 1; i <= m; i ++)
    {
        fin >> x;
        fin >> y.nod >> y.cost;
        L[x].push_back(y);
    }
}

void dijkstra()
{
    el ba;
    ba.nod = 1;
    ba.cost = 0;
    Q.push(ba);

    while(!Q.empty())
    {
        el baba = Q.top();
        Q.pop();
        for(auto it : L[baba.nod]) ///i-ul meu merge pe el, nu pe int de fapt
        {
            int nodi = it.nod;
            int cost_cur = it.cost + dmin[baba.nod];
            if(dmin[nodi] > cost_cur)
            {
                dmin[nodi] = cost_cur;
                el BaBa;
                BaBa.nod = nodi;
                BaBa.cost = dmin[nodi];
                Q.push(BaBa); ///bag in coada cu costul total pana la nodul i, nu doar cu costul initial al muchiei
            }
        }
    }
}

int main()
{
    read();
    for(int i = 2; i <= n; i ++)
        dmin[i] = 1e9;

    //stiu ca sursa imi e 1
    dijkstra();
    for(int i = 2; i <= n; i ++)
        if(dmin[i] != 1e9)
            fout << dmin[i] << " ";
        else fout << 0 << " ";

    return 0;
}