Cod sursa(job #2771138)

Utilizator francescom_481francesco martinut francescom_481 Data 25 august 2021 16:26:29
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.61 kb
#include <bits/stdc++.h>
#define DAU ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
#define PLEC return 0;

using namespace std;

ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
#define cin fin
#define cout fout

#define N 50005
#define infinit 10000000000
vector < pair<int, int> > a[N];
priority_queue < pair<int, int> > v;
int n, s, x, y, p, f[N];
int ord, k, m, c, pmax;
long long d[N];

int main()
{
    DAU
    cin >> n >> m >> c;
    for(int i = 1 ; i <= m ; i++)
    {
        cin >> x >> y >> p;
        a[x].push_back({y,p});
        a[y].push_back({x,p});
    }
    for(int i = 1 ; i <= n ; i++)f[i] = 0, d[i] = infinit;
    for(int i = 0 ; i < a[c].size() ; i++)
    {
        v.push({-a[c][i].second,a[c][i].first});
        d[a[c][i].first] = a[c][i].second;
    }
    f[c] = 1, d[c] = 0;
    d[0] = infinit;
    for(int k = 1 ; k < n ; k++)
    {
        for(; !v.empty() ; )
        {
            if(f[v.top().second] == 0)
            {
                pmax = v.top().second ;
                break;
            }
            else v.pop();
        }
        f[pmax] = 1;
        for(int i = 0 ; i < a[pmax].size() ; i++)
        {
            if(f[a[pmax][i].first] == 0  &&  d[a[pmax][i].first] > d[pmax]+a[pmax][i].second)
            {
                d[a[pmax][i].first] = d[pmax]+a[pmax][i].second;
                v.push({-d[a[pmax][i].first],a[pmax][i].first});
            }
        }
    }
    for(int i = 1 ; i <= n ; i++)
    {
        if(d[i] == infinit)cout << "-1 ";
        else cout << d[i] << " ";
    }
    PLEC
}