#include <bits/stdc++.h>
using namespace std;

using ll = long long;

const ll INF = 1e18;

void mincammino(int N, int M, vector<int> X, vector<int> Y, vector<int> P, vector<long long>& D) {

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

    for (int i = 0; i < N; i++) D[i] = INF;

    priority_queue<pair<ll, int>, vector<pair<ll, int>>, greater<pair<ll, int>>> Q;
    D[0] = 0;
    Q.push({0, 0});

    while (!Q.empty()) {
        auto [dist, node] = Q.top();
        Q.pop();

        if (dist > D[node]) continue;

        for (auto [dest, w] : adj[node]) {
            if (dist + w < D[dest]) {
                D[dest] = dist+w;
                Q.push({D[dest], dest});
            }
        }
    }

    for (int i = 0; i < N; i++) {
        if (D[i] == INF) D[i] = -1;
    }
}
