#include <vector>
#include <algorithm>
#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) {
    fill(D.begin(), D.end(), pow(10,18));
    long long int nodo,distanza;
    vector<set<pair<long long int,long long int>>> vicini(N);
    vector<bool> visitati(N);
    priority_queue<pair<long long int,long long int>>q;
    pair<long long int,long long int> p;
    for(int i=0;i<M;i++){
            p.first=Y[i];
    p.second=-P[i];
        vicini[X[i]].insert(p);
    }
    p.first=0;
    p.second=0;
    //visitati[0]=true;
    D[0]=0;
    q.push(p);
    while(!q.empty()){
        p=q.top();
        q.pop();
        nodo=p.first;
        distanza=-p.second;
        if(visitati[nodo]==false){
            visitati[nodo]=true;

        for(pair<long long int,long long int> element:vicini[nodo]){
                if(D[nodo]+element.second*-1<D[element.first]){
                    D[element.first]=D[nodo]+element.second*-1;
                    p.first=element.first;
                    p.second=-1*D[element.first];
                    q.push(p);
                }
            }
        }
    }
for(int i=0;i<N;i++){
    if(D[i]==pow(10,18)){
        D[i]=-1;
    }
}
}
