Cod sursa(job #2927141)

Utilizator C_R_I_S_T_I_2_3Cristi Gavrila C_R_I_S_T_I_2_3 Data 19 octombrie 2022 17:31:54
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.31 kb
#include <bits/stdc++.h>
#define MAX 9999999
using namespace std;

ifstream fin("dijsktra.in");
ofstream fout("dijsktra.out");
struct muchie
{
    int nod, cost;
    inline bool operator <(const muchie &A) const
    {
        return cost > A.cost;
    }
};
priority_queue <muchie> q;
vector <muchie> v[50005];
int n, m;
bool viz[50005];
int dp[50005];

inline void Citire()
{
    fin >> n >> m;
    for(int i = 1; i <= m; i ++)
    {
        int a, b, c;
        fin >> a >> b >> c;
        muchie aux;
        aux.nod = b, aux.cost = c;
        v[a].push_back(aux);
    }
}

inline void Dijsktra(int start)
{
    for(int i = 1; i <= n; i ++)
    {
        dp[i] = MAX;
    }
    dp[start] = 0;
    q.push({start, 0});
    while(!q.empty())
    {
        muchie aux = q.top();
        q.pop();
        if(viz[aux.nod] == 0)
        {
            viz[aux.nod] = 1;
            for(auto it: v[aux.nod])
            {
                if(dp[it.nod] > dp[aux.nod] + it.cost)
                {
                    dp[it.nod] = dp[aux.nod] + it.cost;
                    q.push({it.nod, dp[it.nod]});
                }
            }
        }
    }
}
int main()
{
    Citire();
    Dijsktra(1);
    for(int i = 2; i <= n; i ++)
    {
        fout << dp[i] << " ";
    }
    return 0;
}