Cod sursa(job #2193351)

Utilizator HumikoPostu Alexandru Humiko Data 9 aprilie 2018 20:11:39
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.26 kb
#include <bits/stdc++.h>
#define nmax 100010
#define oo 2e9
#define ll long long

using namespace std;

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

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

priority_queue <pair<ll, ll>, vector<pair<ll, ll>>, cmp> Q;
vector <pair<int, int>> graf[nmax];
ll v[nmax], n, m;
bool viz[nmax];

void dijkstra()
{
    for ( int i = 2; i <= n; ++i )
        v[i] = oo;
    Q.push({1, v[1]});
    while ( Q.size() )
    {
        int nod = Q.top().first;
        int cost = Q.top().second;
        Q.pop();
        if ( v[nod] != cost )
            continue;
        for ( auto x:graf[nod] )
        {
            if ( cost+x.second < v[x.first] )
            {
                v[x.first] = cost+x.second;
                Q.push({x.first, v[x.first]});
            }
        }
    }
}


int main()
{
    fin>>n>>m;
    for ( int i = 1; i <= m; ++i )
    {
        int x, y, d;
        fin>>x>>y>>d;
        graf[x].push_back({y, d});
    }
    dijkstra();
    for ( int i = 2; i <= n; ++i )
        if ( v[i] == oo )
            fout<<0<<" ";
        else
            fout<<v[i]<<" ";
}