Cod sursa(job #2607332)

Utilizator liviu2000Dragomirescu Liviu liviu2000 Data 29 aprilie 2020 16:57:38
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.39 kb
#include <bits/stdc++.h>
#define N 50005
using namespace std;

int dist[N] ,n;
vector<pair<int,int> > graf[N] ;

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

class cmp
{
public:
    bool operator () ( int a , int b)
    {
        return dist[a] > dist[b] ;
    }
};

void dij(int nod)
{
    int i ;
    priority_queue<int,vector<int>,cmp> pq ;
    bool viz[N];
    pq.push(nod) ;
    for ( i = 1 ; i <= n ; i++ )
        dist[i] = 0x3f3f3f3f , viz[i] = false ;
    dist[nod] = 0 ;
    while ( !pq.empty() )
    {
        nod = pq.top() ;
        pq.pop() ;
        viz[nod] = false;
        for ( auto vec : graf[nod] )
        {
            if ( dist[vec.first] > dist[nod] + vec.second )
            {
                dist[vec.first] = dist[nod] + vec.second ;
                if ( viz[vec.first] == false )
                {
                    pq.push(vec.first) ;
                    viz[vec.first] = true ;
                }
            }
        }
    }
}

void citire()
{
    int i , x , y , z,m;
    fin >> n >> m ;
    for ( i = 1; i <= m ; i++ )
    {
        fin >> x >> y >> z;
        graf[x].push_back({y,z}) ;
    }
}

int main()
{
    citire();
    dij(1);
    for ( int i = 2 ; i <= n ; i++ )
    {
        if ( dist[i] == 0x3f3f3f3f )
            fout << "0 " ;
        else
            fout << dist[i] << " " ;
    }
}