#include <iostream>
#include <vector>
#include <queue>
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<int,int>>>adj(N);
    for (int i=0;i<M;i++){
        adj[X[i]].push_back({Y[i],P[i]});
    }
    D.resize(N,1e15);
    D[0]=0;
    priority_queue<pair<ll,int>,vector<pair<ll,int>>,greater<pair<ll,int>>>pq;
    pq.push({0,0});
    vector<bool>vis(N,false);
    while(!pq.empty()){
        int v=pq.top().second;
        pq.pop();
        if (vis[v])
            continue;
        vis[v]=true;
        for (auto j:adj[v]){
            int w=j.first, d=j.second;
            if (D[w]>D[v]+(ll)d){
                D[w]=(ll)d+D[v];
                pq.push({D[w],w});
            }
        }
    }
    for (int i=0;i<N;i++){
        if (D[i]==1e15)
            D[i]=-1;
    }
}