// File votingcity.cpp created on 27.10.2025 at 14:31:29
#include <bits/stdc++.h>
using i64 = long long;
#ifdef DEBUG 
    #include "/home/ahmetalp/Desktop/Workplace/debug.h"
#else
    #define debug(...) void(23)
#endif
constexpr i64 inf = i64(1E18);
template<typename T>
bool chmin(T& a, T b) {
    if (a > b) {
        a = b;
        return true;
    }
    return false;
}
template<typename T>
using min_pq = std::priority_queue<T, std::vector<T>, std::greater<T>>;
int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    int N, M, K;
    std::cin >> N >> M >> K;
    std::vector<int> spec(N);
    for (int i = 0; i < K; ++i) {
        int A;
        std::cin >> A;
        spec[A] = true;
    }
    std::vector<std::array<int, 3>> E(M);
    std::vector<std::vector<int>> adj(N);
    for (int i = 0; i < M; ++i) {
        int A, B, C;
        std::cin >> A >> B >> C;
        E[i] = {A, B, C};
        adj[B].emplace_back(i);
    }
    int Q;
    std::cin >> Q;
    std::vector<std::vector<i64>> dis(N, std::vector<i64>(1 << 5, inf));
    min_pq<std::tuple<i64, int, int>> pq;
    for (int i = 0; i < N; ++i) {
        if (spec[i]) {
            pq.emplace(dis[i][0] = 0, i, 0);
        }
    }
    while (!pq.empty()) {
        auto[d, v, t] = pq.top();
        pq.pop();
        if (dis[v][t] != d) {
            continue;
        }
        for (auto i : adj[v]) {
            int u = E[i][0] ^ E[i][1] ^ v;
            if (chmin(dis[u][t], d + E[i][2])) {
                pq.emplace(dis[u][t], u, t);
            }
            for (int k = 0; k < 5; ++k) {
                if (t >> k & 1) {
                    continue;
                }
                if (chmin(dis[u][t | (1 << k)], d + E[i][2] / 10 * (9 - k))) {
                    pq.emplace(dis[u][t | (1 << k)], u, t | (1 << k));
                }
            }
        }
    }
    while (Q--) {
        int S;
        i64 P[5];
        std::cin >> S;
        for (int i = 0; i < 5; ++i) {
            std::cin >> P[i];
            if (P[i] == -1) {
                P[i] = inf;
            }
        }
        i64 ans = inf;
        for (int m = 0; m < (1 << 5); ++m) {
            i64 sum = 0;
            for (int i = 0; i < 5; ++i) {
                if (m >> i & 1) {
                    sum += P[i];
                }
            }
            chmin(ans, dis[S][m] + sum);
        }
        if (ans >= inf) {
            ans = -1;
        }
        std::cout << ans << '\n';
    }
    return 0;
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |