#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) {
    fill(D.begin(), D.end(), LLONG_MAX);
    set<pair<long long, int>> pq = {};
    pq.insert({0, 0});
    vector<vector<pair<int, long long>>> adj(N);
    for(int i = 0; i < M; i++){
        adj[X[i]].push_back({Y[i], P[i]});
    }
    // codice...
    set<int> vis = {};
    int act;
    long long dis;
    while(!pq.empty()){
        auto a = pq.begin();
        pair<long long, int> p = *a;
        act = p.second;
        dis = p.first;
        pq.erase(pq.begin());
        if(vis.count(act) != 0) {
            continue;
        }
        vis.insert(act);
        D[act] = min(D[act], dis);
        for(int i = 0; i < adj[act].size(); i++){    
            pq.insert({D[act] + adj[act][i].second, adj[act][i].first});
        }
    }
    for(int i = 0; i < D.size(); i++) {
        if(D[i] == LLONG_MAX) D[i] = -1; 
    }
}