#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define int ll
typedef pair <int, int> pii;
typedef pair <int, pii> ipi;
#define fi first
#define se second
#define pb push_back
const int MOD = 1e9 + 7;
const int MAX = 3e5 + 5;
const ll INF = 1e15;
#pragma GCC optimize ("Ofast")
const int dx[4] = {0, 0, 1, -1};
const int dy[4] = {1, -1, 0, 0};
signed main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
int n, e, k; cin >> n >> e >> k;
vector <int> votes;
vector <pii> adj[n];
for(int i = 0 ; i < k ; i++){
int x; cin >> x;
votes.pb(x);
}
for(int i = 0 ; i < e ; i++){
int u, v, w; cin >> u >> v >> w;
adj[v].pb({u, w});
}
ll dist[n + 5][(1ll << 5)];
for(int i = 0 ; i < n + 5 ; i++){
for(int j = 0 ; j < (1ll << 5) ; j++){
dist[i][j] = (ll)1e18;
}
}
priority_queue <tuple<int, int, int>, vector<tuple<int, int, int>>, greater<tuple<int, int, int>>> q;
for(auto it : votes){
dist[it][0] = 0;
q.push({0, it, 0});
}
while(q.size()){
auto [dis, cur, mask] = q.top();q.pop();
if(dist[cur][mask] < dis)continue;
for(auto [nxt, ad] : adj[cur]){
if(dist[nxt][mask] > dis + ad){
dist[nxt][mask] = dis + ad;
q.push({dis + ad, nxt, mask});
}
for(int i = 0 ; i < 5 ; i++){
if(!((mask >> i) & 1)){
int newad = ad;
newad /= 10;
newad *= (10 - i - 1);
if(dist[nxt][mask | (1ll << i)] > dis + newad){
dist[nxt][mask | (1ll << i)] = dis + newad;
q.push({dis + newad, nxt, (mask | (1ll << i))});
}
}
}
}
}
int qe; cin >> qe;
while(qe--){
int st; cin >> st;
int pay[5];
for(int i = 0 ; i <5 ; i++)cin >> pay[i];
ll ans = (ll)1e18;
for(int i = 0 ; i < (1ll << 5) ; i++){
bool can = 1;
ll cur = dist[st][i];
for(int j = 0 ; j < 5 ; j++){
if((i >> j) & 1){
if(pay[j] == -1)can = 0;
else cur += pay[j];
}
}
if(can)ans = min(ans,cur);
}
cout << (ans == (ll)1e18 ? -1 : ans) << endl;
}
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... |