Cod sursa(job #3205322)

Utilizator dariusbandilaBandila Darius-Mihai dariusbandila Data 19 februarie 2024 12:18:06
Problema Algoritmul lui Dijkstra Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.07 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
int n,m,p;
vector<bool>used(100005);
vector<vector<pair<int,int>>>adj(100005);
void dijkstra(int nod){
    vector<int>d(n+1,1e9);
    priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq;
    pq.push({0,nod});
    used[1]=1;
    d[nod]=0;
    while(!pq.empty()){
        int son=pq.top().second;
        used[son]=0;
        pq.pop();
        for(auto m : adj[son]){
            int vecin=m.first;
            int distanta=m.second;
            if(d[vecin]>d[son]+distanta){
                d[vecin]=d[son]+distanta;
                if(!used[vecin])pq.push({d[vecin],vecin});
            }
        }
    }
    for(int i=2;i<=n;i++){
            if(d[i]!=1e9)fout<<d[i] << ' ';
        else fout << 0 << ' ';
    }
}
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});
    }
    dijkstra(1);
    return 0;
}