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

void mincammino(int N, int M, vector<int> X, vector<int> Y, vector<int> P, vector<long long>& D) {
  vector<vector<pair<ll,ll>>> lis_adi(N);
  priority_queue<pair<ll,ll>> coda;
  vector<ll> dist(N,LLONG_MAX);
  for (int i=0;i<M;i++){
    lis_adi[X[i]].push_back({Y[i],P[i]});
  }
  ll y;
  dist[0]=0;
  coda.push({0,0});
  while(!coda.empty()){
    auto [V,nodo]=coda.top();
    coda.pop();
    V*=-1;
    if (dist[nodo]<V) continue;
    for (auto [vicino,peso] : lis_adi[nodo]){
      y=V+peso;
      if (y<dist[vicino]){
        coda.push({-y,vicino});
        dist[vicino]=y;
      }
    }
  }
  for (int i=0;i<N;i++){
    if (dist[i]==LLONG_MAX) D[i]=-1;
    else D[i]=dist[i];
  }
  
}
