#include <vector>
#include <queue>
#include <algorithm>
#define ll long long
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>>> adj(N);

    for (int i = 0; i < M; i++) {
        adj[X[i]].push_back({Y[i], P[i]});
        adj[Y[i]].push_back({X[i], P[i]});
    }

    fill(D.begin(), D.end(), -1);
    priority_queue<pair<ll,int>> q;
    q.push({0, 0});

    while (!q.empty()) {
        int n = q.top().second;
        ll d = -q.top().first;
        q.pop();
        if (D[n] != -1) continue;
        D[n] = d;

        for (auto p : adj[n]) {
            if (D[p.first] == -1) q.push({-((ll)p.second + d), p.first});
        }
    }

    return;
}
