#include <bits/stdc++.h>
using namespace std;
using ll = long long;

void mincammino(int N, int M, vector<int> X, vector<int> Y, vector<int> P, vector<long long>& D) {
    fill(D.begin(), D.end(), -1);
    vector<vector<pair<ll, ll>>> nodes(N); // 1: arrivo, 2: costo
    for (ll i{ }; i < N; ++i) nodes[X[i]].push_back({ Y[i], P[i] });

    vector<ll> fired = { 0 };
    D[0] = 0;
    while (fired.size() > 0) {
        vector<ll> new_fired;

        for (ll& f : fired) {
            for (const pair<ll, ll>& conn : nodes[f]) {
                ll n2{ conn.first }, weight{ conn.second };
                if (D[n2] == -1 || D[n2] > D[f] + weight) {
                    D[n2] = D[f] + weight;
                    new_fired.push_back(n2);
                }
            }
        }

        fired = new_fired;
    }
}
