#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) {
    vector<vector<pair<int,int>>>legami(N);
    for(int i=0;i<M;i++){
        legami[X[i]].push_back({Y[i],P[i]});
    }
    D=vector<long long>(N,1000000000000000);
    D[0]=0;
    priority_queue<pair<long long,int>>queue;
    queue.push({0,0});
    while(!queue.empty()){
        int x=queue.top().second;
        queue.pop();
        for(int i=0;i<legami[x].size();i++){
            long long omega=D[x]+(long long)legami[x][i].second;
            if(omega<D[legami[x][i].first])
            {
                D[legami[x][i].first]=omega;
                queue.push({omega,legami[x][i].first});

            }
        }
        
        //for(int i=0;i<)
    }
    for(int i=0;i<D.size();i++){
        if(D[i]==1000000000000000)D[i]=-1;
    }
    return;
}
