Cod sursa(job #2485659)

Utilizator AlexandruBrezuleanuAlexandruBrezuleanu AlexandruBrezuleanu Data 1 noiembrie 2019 21:08:16
Problema Algoritmul lui Dijkstra Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.24 kb
#include <bits/stdc++.h>
#define MAX 50100
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
struct arc
{
    int y,cost;
};
inline bool operator<(arc a,arc b)
{
    return a.cost>b.cost;
}
int d[MAX];
bool uz[MAX];
vector<arc>g[MAX];
priority_queue<arc>pq;
void dijkstra(int node);
void citire();
int n,m;
int main()
{
     int i;
     citire();
     dijkstra(1);
     for(i=2;i<=n;i++)
        fout<<d[i]<<' ';
    return 0;
}
void citire()
{
    int i,x,y,cat;
    fin>>n>>m;
    for(i=1; i<=m; i++)
    {
        fin>>x>>y>>cat;
        g[x].push_back({y,cat});
    }
}
void dijkstra(int node)
{
    int nodecrt,vecin,cat,i;
    pq.push({node,0});
    uz[node]=1;
    while(!pq.empty())
    {
        nodecrt=pq.top().y;
        pq.pop();
        uz[nodecrt]=0;
        for(i=0;i<g[nodecrt].size();i++)
        {
            vecin=g[nodecrt][i].y;
            cat=g[nodecrt][i].cost;
            if(!d[vecin]||d[vecin]>d[nodecrt]+cat)
            {
                d[vecin]=d[nodecrt]+cat;
                if(!uz[vecin])
                {
                    pq.push({vecin,d[vecin]});
                    uz[vecin]=1;
                }
            }
        }
    }
}