Cod sursa(job #2354789)

Utilizator MaxTeoTeo Oprescu MaxTeo Data 25 februarie 2019 16:28:22
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.36 kb
#include <bits/stdc++.h>
using namespace std;

ifstream f("dijkstra.in");
ofstream g("dijkstra.out");

const int MAX = 5e4 + 5;
const int INF = 1E9 + 5;

int n, m;

struct Node
{
    int distance, vertex;

    Node(const int &distance, const int &vertex)
    {
        this->distance = distance;
        this->vertex = vertex;
    }

    bool operator < (const Node &other) const
    {
        return this->distance > other.distance;
    }
};

priority_queue<Node> pq;
vector<vector<Node> > graph;

void Read()
{
    f >> n >> m;
    graph.resize(n + 1);

    for(int i = 1; i <= m; ++i)
    {
        int u, v, Dist;
        f >> u >> v >> Dist;
        graph[u].push_back({Dist, v});
    }
}

void Solve()
{
    vector<int> Dist (n + 1, INF);
    pq.push({0, 1});
    while(!pq.empty())
    {
        int vertex = pq.top().vertex;
        int vertexDistance = pq.top().distance;

        pq.pop();

        if(Dist[vertex] != INF) continue;
        Dist[vertex] = vertexDistance;
        for(auto& child : graph[vertex])
        {
            if(Dist[child.vertex] == INF)
                pq.push({vertexDistance + child.distance, child.vertex});
        }
    }

    for(int i = 2; i <= n; ++i)
        g << (Dist[i] == INF ? 0 : Dist[i]) << " ";
    g << "\n";
}

int main()
{
    Read();
    Solve();
    return 0;
}