Link to this code: https://cses.fi/paste/17e210f0b4761c0966e415/
#include<bits/stdc++.h>
using namespace std;
#define a2 array<long long,2>
class ShortestRoutesI{
  int n,m;
  vector<a2>*graph;
  vector<long long>minDistance;
public:
  ShortestRoutesI(int n,int m,vector<a2>*graph){
    this->n=n;
    this->m=m;
    this->graph=graph;
    minDistance.resize(n+1,1e18);
    minDistance[1]=0;
  }
  vector<long long> getShortPath(){
    int city,weight;
    priority_queue<a2,vector<a2>,greater<a2>>que;
    que.push({0,1});
    int cnt=0;
    while(!que.empty()){
      city=que.top()[1];
      weight=que.top()[0];
      que.pop();
      if(minDistance[city]<weight)continue;
      for(auto &cityb:graph[city]){
        if(minDistance[city]+cityb[0]<minDistance[cityb[1]]){
          minDistance[cityb[1]]=minDistance[city]+cityb[0];
          que.push({minDistance[cityb[1]],cityb[1]});
        }
      }
    }
    return minDistance;
  }
};
int main(){
  int n,m;
  cin>>n>>m;
  int citya,cityb,length;
  vector<a2>graph[n+1];
  for(int connection=1;connection<=m;connection++){
    cin>>citya>>cityb>>length;
    graph[citya].push_back({length,cityb});
  }
  ShortestRoutesI route(n,m,graph);  
  vector<long long>path=route.getShortPath();
  for(int city=1;city<=n;city++){
    cout<<path[city]<<" ";
  }
}