#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) {
    int x = X[i]; int y = Y[i]; int w = P[i];
    adj[x].push_back({y, w});
  }

  vector<bool> visited(N, false);
  fill(D.begin(), D.end(), 1e18);

  priority_queue<pair<long long, int>> q;

  D[0] = 0;
  

  q.push({-D[0], 0});

  while (!q.empty()) {
    auto [_, u] = q.top(); q.pop();
    visited[u] = true;

    for (auto [v, w] : adj[u]) {
      if (visited[v]) continue;
      if (D[u] + w < D[v]) {
        D[v] = D[u] + w;
        q.push({-D[v], v});
      }
    }
  }

  for (auto &x : D) x = x==1e18?-1:x;
  
}
