Cod sursa(job #2683823)

Utilizator SoranaAureliaCatrina Sorana SoranaAurelia Data 12 decembrie 2020 10:21:24
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.26 kb
#include <fstream>
#include <queue>
#define NMAX 50005
#define INF 0x3f3f3f3f
using namespace std;


ifstream f("dijkstra.in");
ofstream g("dijkstra.out");

struct elem{
    int y, cost;
    bool operator<(const elem &other) const{
        if(cost!=other.cost)
            return cost>other.cost;
        return y>other.y;
    }
};

int dmin[NMAX], viz[NMAX];
int n, m;

priority_queue<elem>Q;
vector<elem>graph[NMAX];

void citire(){
    int x, y, cost;
    f>>n>>m;
    for(int i=0; i<m; i++){
        f>>x>>y>>cost;
        graph[x].push_back({y, cost});
    }
}

void init(){
    for(int i=1; i<=n; i++)
        dmin[i] = INF;
}

void dijkstra(int vf){
    dmin[vf] = 0;
    Q.push({1, 0});

    while(!Q.empty()){
        elem el = Q.top();
        Q.pop();
        if(viz[el.y] == 1)
            continue;
        viz[el.y] = 1;
        for(auto &v:graph[el.y]){
            if(viz[v.y] == 0 && dmin[v.y] > dmin[el.y] + v.cost){
                dmin[v.y] = dmin[el.y] + v.cost;
                Q.push({v.y, dmin[v.y]});
            }
        }
    }
}

void afisare(){
    for(int i=2; i<=n; i++)
        g<<dmin[i]<<" ";
}


int main()
{
    citire();
    init();
    dijkstra(1);
    afisare();
    return 0;
}