#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>>> adj(N);
    vector<bool> vis(N, false);
    for(int i = 0; i<M; i++){
      adj[X[i]].push_back({Y[i], P[i]});
    }
  for(int i = 0; i<N; i++){
    D[i] = 1e18;
  }
  D[0] = 0;

  priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> coda;
  coda.push({0,0});

  while(not coda.empty()){
    auto[dist, nodo] = coda.top();
    coda.pop();

    if (vis[nodo]) continue;
    vis[nodo] =true;

    for(auto[succ, peso] : adj[nodo]){
      if (D[nodo] + peso < D[succ]){
        D[succ] = D[nodo]+peso;
        coda.push({D[succ], succ});
      }
    }
  }
  for(int i = 0; i<N; i++){
    if (D[i] == 1e18) D[i] = -1;
  }
  
}
