Cod sursa(job #2356310)

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

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

const int INF = 1e9 + 5;

struct Node
{
    int dist, vertex;

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

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

priority_queue<Node> pq;
vector<vector<Node> > graph;
int n, m;

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().dist;
        pq.pop();

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

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

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