#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair <ll, int> pLI;

void mincammino(int N, int M, vector<int> X, vector<int> Y, vector<int> P, vector<long long>& D) {
    fill(D.begin(), D.end(), -1);
    vector <vector <pair <int, ll>>> n(N);
    for(int i = 0; i < N; ++i){
    	n[X[i]].push_back({Y[i], P[i]});
	}
	vector <bool> VIS(N, false);
	priority_queue <pLI, vector <pLI>, greater <pLI>> V;
	V.push({0, 0});
	D[0] = 0;
	
	while(!V.empty()){
		int nodo = V.top().second; V.pop();
		ll peso = D[nodo];
		if(!VIS[nodo]){
			for(auto succ : n[nodo]){
				ll newD = peso +succ.second;
				if(D[succ.first] == -1 || D[succ.first] > newD){
					D[succ.first] = newD;
					V.push({newD, succ.first});
				}
			}
			VIS[nodo] = true;
		}
	}	
}
