Cod sursa(job #3246897)

Utilizator MateiAlex24Diamandi Matei MateiAlex24 Data 4 octombrie 2024 18:33:53
Problema Algoritmul lui Dijkstra Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#include <bits/stdc++.h>

using namespace std;

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

vector<pair<int,int> > v[50001];
int cost[50001], n, m, inf=1e9, inCoada[50001];

class cmp{
    public:
        bool operator()(int x, int y){
            return cost[x] > cost[y];
        }
};
priority_queue<int, vector<int>, cmp> pq;


void dijkstra(int nod){
    for (int i=1; i<=n; i++){
        cost[i] = inf;
    }
    cost[nod] = 0;
    pq.push(nod);
    while (!pq.empty()){
        nod = pq.top();
        for (auto elem: v[nod]){
            if (cost[nod] + elem.second < cost[elem.first]){
                cost[elem.first] = cost[nod]+elem.second;
                if (!inCoada[elem.first]){
                    pq.push(elem.first);
                    inCoada[elem.first] = 1;
                }
            }
        }
        inCoada[nod] = 0;
        pq.pop();
    }
    
}

int main()
{
    fin>>n>>m;
    
    for (int i=1; i<=m; i++){
        int x,y,c;
        fin>>x>>y>>c;
        v[x].push_back(make_pair(y,c));
        v[y].push_back({x,c});
    }
    
    dijkstra(1);
    
    for (int i=2; i<=n; i++)
        fout<<cost[i]<<" ";

    return 0;
}