#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,long long>>>adj(N);
    for(int i=0;i<M;i++){
      adj[X[i]].push_back({Y[i],P[i]});  
    }
    D.assign(N,1e18);
    priority_queue<pair<long long,int>>pq;
    pq.push({0,0});
    D[0]=0;
    while(!pq.empty()){
      long long distcorrente=-pq.top().first;
      int nodocorrente=pq.top().second;
      pq.pop();
      if(D[nodocorrente]<distcorrente)continue;
      for(auto vicino:adj[nodocorrente]){
        int n=vicino.first;
        long long w=vicino.second;
        if(D[n]>w+D[nodocorrente]){
          D[n]=w+D[nodocorrente];
          pq.push({-D[n],n});
        }
        
      }
    }
    for(int i=0;i<N;i++){
      if(D[i]==1e18)D[i]=-1;
    }
    
}
