#include <bits/stdc++.h>
using namespace std;

void mincammino(int N, int M, vector<int> X, vector<int> Y, vector<int> P, vector<long long>& D) {
    vector<vector<pair<int,int>>> grafo(N);
    priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>> q;
    vector<long long> dist(N,LLONG_MAX);

    for(int i=0; i<M; i++){
      grafo[X[i]].push_back({Y[i],P[i]});
    }

  
    dist[0]=0;
    q.push({0,0});

    while(!q.empty()){
      long long distanza = q.top().first;
      int nodo = q.top().second;
      q.pop();
      
      if(distanza<=dist[nodo]){
        
      for( auto e : grafo[nodo]){
        
        long long peso = e.second;
        int prossimo = e.first;

        if(distanza+peso<dist[prossimo]){
          dist[prossimo]= distanza + peso;
          q.push({dist[prossimo],prossimo}) ;        
        }
            
      }
    }
      
    }
    for(int i=0; i<N; i++){
      if(dist[i]==LLONG_MAX){
        dist[i]=-1;
      }
      D[i]=dist[i];
    }
  
}










