#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);
    vector<array<int, 3>> archi(M);
    for(int i = 0; i < M; i++){
        archi[i] = {X[i], Y[i], P[i]};
    }
    sort(archi.begin(), archi.end());
    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[archi[i][0]].push_back({archi[i][1], archi[i][2]});
    }
    // 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());
        D[act] = min(D[act], dis);
        for(int i = 0; i < adj[act].size(); i++){
            if(vis.count(adj[act][i].first) == 0){
                vis.insert(adj[act][i].first);
                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; 
    }
}