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

void mincammino(int N, int M, vector<int> X, vector<int> Y, vector<int> P, vector<long long>& D) {
    D.resize(N);
    for(int i = 0; i < N; i++) {
        D[i] = INT_MAX;
    }
    D[0] = 0;
    vector<bool> visited(N, 0);
    vector<vector<pair<int, int>>> adj(N);
    for(int i = 0; i < M; i++) {
        adj[X[i]].push_back({Y[i], P[i]});
    }
    priority_queue<pair<int, int>> pq;
    pq.push({0, 0});
    while(!pq.empty()) {
        int a = -pq.top().first;
        int x = pq.top().second;
        pq.pop();
        if(visited[x] == 0) {
            visited[x] = 1;
            for(auto [y, p]: adj[x]) {
                if(visited[y] == 0 && D[x]+p<D[y]) {
                    D[y] = D[x]+p;
                    pq.push({-D[y], y});
                }
            }
        }
    }
    for(int i = 0; i < N; i++) {
        if(D[i] == INT_MAX) {
            D[i] = -1;
        }
    }
}