Cod sursa(job #3205333)

Utilizator dariusbandilaBandila Darius-Mihai dariusbandila Data 19 februarie 2024 13:01:04
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
const int inf=1<<30;
int n,m,p;
bitset<50002>viz;
vector<vector<pair<int,int>>>adj(50002);
vector<int>d(50002);
void dijkstra(int nod){
    priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>>pq;
    d[nod]=0;
    pq.push({0,nod});
    while(!pq.empty()){
        int x=pq.top().second;
        pq.pop();
        if(viz[x])continue;
        viz[x]=1;
        for(auto it : adj[x]){
            int nodnou=it.first;
            int cost=it.second;
            if(d[nodnou]>d[x]+cost){
                d[nodnou]=d[x]+cost;
                pq.push({d[nodnou],nodnou});
            }
        }
    }
}
int main() {
    fin>>n>>m;
    for(int i=1;i<=m;i++){
        int x,y,d;
        fin>>x>>y>>d;
        adj[x].push_back({y,d});
        adj[y].push_back({x,d});
    }
    for(int i=1;i<=n;i++)d[i] =inf;
    dijkstra(1);
    for(int i=2;i<=n;i++){
        if(d[i]==inf)fout<<0<<' ';
        else fout << d[i] << ' ';
    }
    return 0;
}