Cod sursa(job #2249662)

Utilizator AlexutAlex Calinescu Alexut Data 30 septembrie 2018 09:56:22
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.48 kb
#include <bits/stdc++.h>
#define nmax 50005
#define oo 1e9

using namespace std;

ifstream fin ("dijkstra.in");
ofstream fout ("dijkstra.out");

int n, m;
int minimum_Distance[nmax];
vector <pair<int, int>> graph[nmax];

class cmp
{
    public:
        const bool operator () ( pair <int, int> &a, pair<int, int> &b )
        {
            return a.second > b.second;
        }
};

priority_queue <pair<int, int>, vector<pair<int, int>>, cmp> road;

void dijkstra()
{
    for ( int i = 2; i <= n; ++i )
        minimum_Distance[i] = oo;

    road.push({1, minimum_Distance[1]});

    while ( road.size() )
    {
        int node = road.top().first;
        int edge = road.top().second;
        road.pop();

        if ( minimum_Distance[node] != edge )
            continue;

        for ( auto x:graph[node] )
        {
            if ( minimum_Distance[x.first] > x.second+edge )
            {
                minimum_Distance[x.first] = x.second+edge;
                road.push({x.first, x.second+edge});
            }
        }
    }
}

int main()
{
    fin>>n>>m;

    for ( int i = 1; i <= m; ++i )
    {
        int first_Node, second_Node, price;
        fin>>first_Node>>second_Node>>price;
        graph[first_Node].push_back({second_Node, price});
    }

    dijkstra();

    for ( int i = 2; i <= n; ++i )
        if ( minimum_Distance[i] == oo )
            fout<<0<<" ";
        else
            fout<<minimum_Distance[i]<<" ";
}