#include <queue>
#include <vector>
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>>> conn(N, vector<pair<int, int>>());

  for (int i = 0; i < M; i++) {
    conn[X[i]].push_back({Y[i], P[i]});
  }

  for (int i = 0; i < N; i++) {
    D[i] = -1;
  }
  D[0] = 0;

  queue<int> q;
  q.push(0);

  while (!q.empty()) {
    int s = q.front();

    for (auto [e, w] : conn[s]) {
      if (D[e] == -1 || D[e] > D[s] + w) {
        D[e] = D[s] + w;
        q.push(e);
      }
    }

    q.pop();
  }
}
