#include <bits/stdc++.h>
#include <algorithm>
using namespace std;
using ll = long long;

void mincammino(int N, int M, vector<int> X, vector<int> Y, vector<int> P, vector<long long>& D) {
	vector<vector<pair<ll, int>>>adj(N);
	for(int i = 0; i < M; i++){
		adj[X[i]].push_back({P[i], Y[i]});
		adj[Y[i]].push_back({P[i], X[i]});
	}
	vector<ll>dist(N, 0);
	priority_queue<pair<ll, int>, vector<pair<ll, int>>, greater<pair<ll, int>>>pq;
	pq.push({0, 0});
	while(!pq.empty()){
		auto [d, n] = pq.top(); pq.pop();
		for(auto [sd, sn] : adj[n]){
			ll nw = dist[n] + sd;
			if(dist[sn] > nw){
				dist[sn] = nw;
				pq.push({dist[n], sn});
			}
		}
	}
	
	
	D = dist;
}
