#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<long long,long long>>> adj(N);
    for (long long i=0;i<M;i++) adj[X[i]].push_back({Y[i], P[i]});
    fill(D.begin(), D.end(), 1e9);
    D[0] = 0;
    vector<bool> visti(N, false);
    priority_queue<pair<long long,long long>> pq;
    pq.push({0,0});
    while (!pq.empty()) {
        long long nodo = pq.top().second; pq.pop();
        if (visti[nodo]) continue;
        visti[nodo] = true;
        for (pair<long long,long long> x : adj[nodo]) {
            long long nodino = x.first, peso = x.second;
            if (D[nodino] >= D[nodo] + peso) {
                D[nodino] = D[nodo] + peso;
                pq.push({-D[nodino], nodino});
            }
        }
    }
    for (int i=0;i<N;i++) if (D[i] == 1e9) D[i] = -1;
}
