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

#define ll long long
#define 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], (ll)P[i]});
    }
    fill(D.begin(), D.end(), INF);
    vector<bool> visitato(N, false);
    priority_queue<pair<ll, int>> q;
    q.push({0, 0});
    while (!q.empty()) {
        auto [d, v] = q.top();
        q.pop();
        if (!visitato[v]) {
            visitato[v] = true;
            D[v] = -d;
            for (auto [u, w] : Adj[v]) {
                if (!visitato[u]) {
                    if (D[u] > w-d) {
                        q.push({d-w, u});
                        D[u] = w-d;
                    }
                }
            }
        }
    }

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