#include <vector>
#include <algorithm>
#include<queue>
using namespace std;

void mincammino(int N, int M, vector<int> X, vector<int> Y, vector<int> P, vector<long long>& D) {
    fill(D.begin(), D.end(), 42);

priority_queue<pair<long long,int>,vector<pair<long long,int>>,greater<pair<long long,int>>> pq;
vector<long long> best(N,1000000000000);

vector<vector<pair<long long,int>>> adj(N);

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

  
}
  
best[0]=0;
pq.push({0,0});
while(pq.size()!=0){
int index=pq.top().second;
int val=pq.top().first;
pq.pop();

if(best[index]==val){
  for(int i=0;i<adj[index].size();i++){
if(val+adj[index][i].first<best[adj[index][i].second]){
  best[adj[index][i].second]=val+adj[index][i].first;
  pq.push({best[adj[index][i].second],adj[index][i].second});
}
  
}

}

  
}
  for(int i=0;i<N;i++){if(best[i]==1000000000000){best[i]=-1;}}
D=best;
  
}
