#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){
	vector<vector<pair<int, int>>> lista [N];
	vector<bool> visitato;

	for(int i = 0; i < N; i++){
		D[i] = 1e18;
		visitato.push_back(false);
	}
	
	D[0] = 0;
	//salvo come lista adiacente
	for(int i = 0; i < M; i++){
		auto a = X[i];
		cerr << a;
		lista[a].push_back({P[i], Y[i]});
	}

	priority_queue<pair<long long, int>> q;
	q.push({0,0});
	
	while(!q.empty()){
		int a = q.top().second;
		q.pop();
		if(visitato[a]) continue; //se ho già visto a vado avanti
		visitato[a] = true;
		for(auto i : lista[a]){
			if(i.first + D[a] < D[i.second]){
				D[i.second] = i.first + D[a];
			}
			q.push({-D[i.second],i.second});
		}	
	}
}
