#include <vector>
#include <algorithm>
#include <bits/stdc++.h>
using namespace std;
/*
10 10
0 1 1
1 2 1
2 3 1
3 4 1
4 0 1
0 6 100
6 8 100
6 7 100
7 8 1
8 9 1





*/
void mincammino(int N, int M, vector<int> X, vector<int> Y, vector<int> P, vector<long long>& D) {
    for(int i=0;i<N;i++){
        D[i]=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.second=Y[i];
    p.first=-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.second;
        //cout<<nodo<<endl;
        distanza=-p.first;
        if(visitati[nodo]==false){
            visitati[nodo]=true;

        for(pair<long long int,long long int> element:vicini[nodo]){
                if(D[nodo]+element.first*-1<D[element.second]){
                    D[element.second]=D[nodo]+element.first*-1;
                    p.second=element.second;
                    p.first=-1*D[element.second];
                    q.push(p);
                }
            }
        }
    }
for(int i=0;i<N;i++){
    if(D[i]==pow(10,18)){
        D[i]=-1;
    }
}
}
