Cod sursa(job #3214739)

Utilizator Iustin2812Ion Iustin Ciprian Iustin2812 Data 14 martie 2024 13:03:18
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.01 kb
#include <iostream>
#include <vector>
#include <queue>
#include <fstream>

using namespace std;

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

vector < pair<int , int> > l[1000001];
priority_queue <pair<int , int>> q;
int n;
int viz[100001],cost[100001]={0};

void dijkstra(){
    q.push({0,1});
    viz[q.top().second]=1;
    
    while(!q.empty()){
        
        
        int a=q.top().second,dist=-q.top().first;
        q.pop();
        if(cost[a]<dist) continue;
        for(int i=0;i<l[a].size();i++){
            
            if(viz[l[a][i].first]==0){
                cost[l[a][i].first]=cost[a]+l[a][i].second;
                viz[l[a][i].first]=1;
                q.push({-l[a][i].second , l[a][i].first});
            }
            
        }
        
    }
    
    
}

int main() {
    int m;
    fin>>n>>m;
    int x,y,z;
    for(int i=1;i<=m;i++){
        fin>>x>>y>>z;
        l[x].push_back({y,z});

    }
    dijkstra();
    for(int i=2;i<=n;i++){
        fout<<cost[i]<<" ";
    }
    return 0;
}