#include <bits/stdc++.h>
#include <climits>
#include <queue>
using namespace std;
typedef long long ll;

void mincammino(int N, int M, vector<int> X, vector<int> Y, vector<int> P, vector<long long>& D) {
    fill(begin(D), end(D), LLONG_MAX);
    D[0] = 0;

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

    priority_queue<pair<ll, int>, vector<pair<ll, int>>, greater<>> pq;
    pq.push({0,0});

    while(!pq.empty()) {
        auto [d, u] = pq.top();
        pq.pop();

        if(d > D[u]) continue;

        for(auto [v, w] : g[u]) {
            if(D[v] > D[u] + w) {
                D[v] = D[u] + w;
                pq.push({D[v], v});
            }
        }
    }

    for(auto &x : D) {
        if(x == LLONG_MAX) x = -1;
    }
}
