Cod sursa(job #2681663)

Utilizator VladNANegoita Vlad-Andrei VladNA Data 6 decembrie 2020 11:28:40
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.45 kb
#include <fstream>
#include <queue>
#include <vector>
#define NMAX 50000
#define INF 1e8

using namespace std;

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


struct ura
{
    int nod,cost;
    bool operator < (const ura &other)const
    {
        return cost>other.cost;
    };
}aux;
int n,m;
vector <ura> adj[1+NMAX];
int Distanta[1+NMAX];
bool viz[1+NMAX];

void djikstra(int sursa)
{
    for(int i=1;i<=n;i++){
        Distanta[i]=INF;
        viz[i]=false;
    }
    Distanta[sursa]=0;
    priority_queue<ura>pq;
    aux.nod=sursa;
    aux.cost=0;
    pq.push(aux);
    while(!pq.empty())
    {
        ura u=pq.top();
        pq.pop();
        if(!viz[u.nod])
        {


            viz[u.nod]=true;
            for(auto it=adj[u.nod].begin();it!=adj[u.nod].end();it++)
            {
                ura v=*it;
                if(Distanta[v.nod]>Distanta[u.nod]+v.cost)
                {
                    Distanta[v.nod]=Distanta[u.nod]+v.cost;
                    aux.nod=v.nod;
                    aux.cost=Distanta[v.nod];
                    pq.push(aux);
                }
            }
        }
    }
    for(int i=2;i<=n;i++)
        fout<<Distanta[i]<<' ';
}

int main()
{
    fin>>n>>m;
    for(int i=1;i<=m;i++)
    {
        int x,y,c;
        fin>>x>>y>>c;
        aux.nod=y;
        aux.cost=c;
        adj[x].push_back(aux);
    }
    djikstra(1);
    return 0;
}