Cod sursa(job #2371370)

Utilizator gabriel2506Dobre Gabriel gabriel2506 Data 6 martie 2019 17:22:20
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.24 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;

ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
const int inf = 1 << 30;
int d[300000];
bool sel[300000];
vector <pair<int,int>>g[300000];
priority_queue<pair<int,int>> h;
int n,m;
void dijkstra(int nodStart)
{
    int a,y,b,c,x;
    for(int i=1; i<=n; i++)
    {
        d[i]=inf;
    }
    d[nodStart]=0;
    h.push(make_pair(-d[nodStart],nodStart));
    while(!h.empty())
    {
        while(!h.empty()&&sel[h.top().second])
        {
            h.pop();
        }
        if(h.empty())
        {
            return;
        }
        x=h.top().second;
        sel[x]=true;
        for(auto p:g[x])
        {
            y=p.first;
            c=p.second;
            if(d[x]+c<d[y])
            {
                d[y]=d[x]+c;
                h.push(make_pair(-d[y],y));
            }
        }
    }
}

void print()
{
    for(int i = 2; i <= n; i++)
    {
        if(d[i] != inf)
            fout << d[i] << " ";
        else
            fout << "0 ";
    }
}

int main()
{
    int i,a,b,c;
    fin>>n>>m;

    for(i=1; i<=n; i++)
    {
        fin>>a>>b>>c;
        g[a].push_back(make_pair(b,c));
    }
    dijkstra(1);
    print();
    return 0;
}