#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,int>>> near(N,vector<pair<ll,int>>());
    for(int i=0;i<M;i++){
        near[X[i]].push_back({P[i],Y[i]});
    }
    priority_queue<pair<ll,int>,vector<pair<ll,int>>,greater<pair<ll,int>>> pq;
    pq.push({0,0});
    fill(D.begin(),D.end(),(ll)1e18);
    vector<bool> vis(N,false);
    D[0]=0;
    while(!pq.empty()){
        auto [w,u] = pq.top();
        pq.pop();
        if(vis[u])continue;
        vis[u]=true;
        for(auto [p,v] : near[u]){
            if(D[v]>D[u]+p){
                D[v]=D[u]+p;
                pq.push({D[v],v});
            }
        }
    }
    for(auto& i:D)if(i==(ll)1e18)i=-1;
}
