#include <vector>
#include <algorithm>
#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) {
    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<long long, int>> pq;
    for(auto &d : D) {
        d = LLONG_MAX;
    }
    vector<bool> visti (N, false);
    visti[0] = true;
    D[0] = 0;
    pq.push({0, 0});
    while(!pq.empty()) {
        int top = pq.top().second;
        pq.pop();
        visti[top] = true;
        for(auto [i, w] : adj[top]) {
            if (visti[i]) continue;
            if (D[i] > D[top] + w) D[i] = D[top] + w;
            pq.push({-D[i], i});
        }
    }
    for (int i = 0; i < N; i++)
    {
        if (!visti[i]) D[i] = -1;
    }
}
