Cod sursa(job #2681417)

Utilizator AndreiCroitoruAndrei Croitoru AndreiCroitoru Data 5 decembrie 2020 14:00:07
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.18 kb
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream in("dijkstra.in");
ofstream out("dijkstra.out");
struct ura
{
    int b,cost;
};
const int INF=1e9;
vector <ura> v[50001];
priority_queue <pair<int,int>> pq;
bool viz[50001];
int dist[50001];
int main()
{
    int n,m,i,j;
    in>>n>>m;
    for(i=1; i<=m; i++)
    {
        int x,y,c;
        in>>x>>y>>c;
        v[x].push_back({y,c});
    }
    for(i=1; i<=n; i++)
    {
        dist[i]=INF;
    }
    dist[1]=0;
    pq.push({0,1});
    while (!pq.empty())
    {
        int curr=pq.top().second;
        pq.pop();
        if (viz[curr]==0)
        {
            for (i=0; i<v[curr].size(); i++)
            {
                int next=v[curr][i].b;
                int cst=v[curr][i].cost;
                if (dist[curr]+cst<dist[next])
                {
                    dist[next]=dist[curr]+cst;
                    pq.push({-dist[next],next});
                }
            }
            viz[curr]=1;
        }
    }
    for(i=2;i<=n;i++)
    {
        if(dist[i]!=INF)
            out<<dist[i]<<" ";
        else
            out<<"0 ";
    }
    return 0;
}