Cod sursa(job #1997216)

Utilizator Corina1997Todoran Ana-Corina Corina1997 Data 3 iulie 2017 17:35:10
Problema Algoritmul lui Dijkstra Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 1.26 kb
#include <fstream>
#include <vector>
#include <queue>
using namespace std;

ifstream is("dijkstra.in");
ofstream os("dijkstra.out");

#define INF 0x3f3f3f3f

int x, y, cost;

vector<int> dist;
vector<vector<pair<int,int>>> graph;

int N, M;

struct CMP{
    bool operator() (int A, int B)
    {
        return dist[A] > dist[B];
    }
};

priority_queue<int, vector<int>, CMP> nodes;

void Dijkstra( int vertex );

int main()
{
    is >> N >> M;

    dist.resize(N+1, INF);
    graph.resize(N+1);

    for( int i = 0; i < M; i++ )
    {
        is >> x >> y >> cost;
        graph[x].push_back({y, cost});
    }

    Dijkstra(1);

    for( int i = 2; i <= N; i++ )
        if( dist[i] == INF )
            os << "0 ";
        else
            os << dist[i] << ' ';

    is.close();
    os.close();
    return 0;
}

inline void Dijkstra( int vertex )
{
    dist[vertex] = 0;
    nodes.push(vertex);

    while( ! nodes.empty() )
    {
        vertex = nodes.top();
        nodes.pop();

        for( const auto& i : graph[vertex] )
            if( dist[i.first] > dist[vertex] + i.second )
            {
                dist[i.first] = dist[vertex] + i.second;
                nodes.push(i.first);
            }
    }
}