Cod sursa(job #2285713)

Utilizator HumikoPostu Alexandru Humiko Data 18 noiembrie 2018 23:23:16
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.37 kb
#include <bits/stdc++.h>

using namespace std;

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

int n, m;
int v[50005];


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

vector <pair<int, int>> graph[50005];
priority_queue <pair<int, int>, vector<pair<int, int>>, cmp> pq;

void dijkstra ()
{
    for ( int i = 2; i <= 50000; ++i )
        v[i] = 1e9;

    pq.push({1, v[1]});

    while ( pq.size() )
    {
        int node = pq.top().first;
        int cost = pq.top().second;
        pq.pop();

        if ( v[node] != cost )
            continue;

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

int main()
{
    ios::sync_with_stdio(false);
    fin.tie(0); fout.tie(0);

    fin>>n>>m;

    for ( int i = 1; i <= m; ++i )
    {
        int a, b, c;
        fin>>a>>b>>c;

        graph[a].push_back({b, c});
        graph[b].push_back({a, c});
    }

    dijkstra();

    for ( int i = 2; i <= n; ++i )
    {
        if ( v[i] == 1e9 )
            fout<<0<<" ";
        else
            fout<<v[i]<<" ";
    }
}