Cod sursa(job #2706193)

Utilizator Ricardo03Petrovici Ricardo Ricardo03 Data 14 februarie 2021 09:28:54
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <bits/stdc++.h>
using namespace std;
struct elem
{
    int nod, cost;
    bool operator <(const elem &other) const
    {
        return cost > other.cost;
    }
};
priority_queue <elem> Q;
vector <elem> v[50005];
int dist[50005], n, m, i, x, y, z;
void dijkstra(int node)
{
    Q.push({1, 0});
    while(!Q.empty())
    {
        int node = Q.top().nod;
        int cost = Q.top().cost;
        Q.pop();
        if(dist[node] == INT_MAX) dist[node] = cost;
        cost = dist[node];
        for(int i = 0; i < v[node].size(); i++)
            if(dist[v[node][i].nod] > v[node][i].cost + cost)
                Q.push({v[node][i].nod, v[node][i].cost + cost});
    }
}
int main()
{
    ifstream f("dijkstra.in");
    ofstream g("dijkstra.out");
    f >> n >> m;
    for(i = 1; i <= m; i++)
    {
        f >> x >> y >> z;
        v[x].push_back({y, z});
    }
    for(i = 1; i <= n; i++)
        dist[i] = INT_MAX;
    dijkstra(1);
    for(i = 2; i <= n; i++)
        g << dist[i] << " ";
    return 0;
}