#include <bits/stdc++.h>
using namespace std;
#define int long long
signed main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    int n, e, k1; cin >> n >> e >> k1;
    vector<bool> spec(n);
    for(int i = 0; i < k1; i++){
        int h; cin >> h;
        spec[h] = true;
    }
    vector<vector<int>> dis(n, vector<int>(1<<5, 1e18));
    vector<vector<bool>> d(n, vector<bool>(1<<5));
    multiset<pair<int, pair<int, int>>> s;
    //time, type, node
    vector<vector<pair<int, int>>> g(n);
    for(int i = 0; i < e; i++){
        int a, b, c; cin >> a >> b >> c;
        g[b].push_back({a, c});
    }
    for(int i = 0; i < n; i++){
        if(spec[i]){
            s.insert({0, {0, i}});
            dis[i][0] = 0;
        }
    }
    while(s.size() > 0){
        int time = s.begin()->first;
        auto [type, k] = s.begin()->second;
        s.erase(s.begin());
        if(d[k][type]) continue;
        d[k][type] = true;
        for(auto [v, tm] : g[k]){
            for(int y = 0; y < 5; y++){
                int j = 1<<y;
                if((type&j) == 0){
                    int ntype = (type | j);
                    if(d[v][ntype]) continue;
                    if(dis[v][ntype] > time + ((tm/10) * (10-(y+1)))){
                        dis[v][ntype] = time + ((tm/10) * (10-(y+1)));
                        s.insert({dis[v][ntype], {ntype, v}});
                    }
                }
            }
            if(d[v][type]) continue;
            if(dis[v][type] > time + tm){
                dis[v][type] = time + tm;
                s.insert({dis[v][type], {type, v}});
            }
        }
    }
    int q; cin >> q;
    while(q--){
        vector<int> p(5);
        int st; cin >> st;
        for(int i = 0; i < 5; i++){
            cin >> p[i];
        }
        int mn = 1e18;
        for(int y = 0; y < 1<<5; y++){
            int sum = 0;
            for(int z = 0; z < 5; z++){
                if((y&(1<<z)) != 0){
                    if(p[z] == -1){
                        sum = 1e18;
                        break;
                    }
                    sum += p[z];
                }
            }
            mn = min(mn, sum + dis[st][y]);
        }
        if(mn == 1e18){
            mn = -1;
        }
        cout << mn << "\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... |