#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll INF = (1LL<<62);
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int N,E,K;
cin >> N >> E >> K;
vector<int> votes(K);
for(int i=0;i<K;i++){
int x; cin >> x;
votes[i] = x+1; // shift to 1-based
}
vector<vector<pair<int,ll>>> g(N+1);
for(int i=0;i<E;i++){
int u,v; ll c;
cin >> u >> v >> c;
u++; v++; // shift
g[v].push_back({u,c}); // reversed edge
}
static ll dist[5005+5][32];
for(int i=1;i<=N;i++) for(int m=0;m<32;m++) dist[i][m]=INF;
typedef tuple<ll,int,int> T;
priority_queue<T, vector<T>, greater<T>> pq;
for(int t: votes){
dist[t][0] = 0;
pq.push(T(0,t,0));
}
while(!pq.empty()){
ll d; int u,mask;
tie(d,u,mask) = pq.top(); pq.pop();
if(d != dist[u][mask]) continue;
for(auto &ed: g[u]){
int v = ed.first;
ll w = ed.second;
ll nd = d + w;
if(nd < dist[v][mask]){
dist[v][mask] = nd;
pq.push(T(nd,v,mask));
}
for(int t=0;t<5;t++){
if(mask & (1<<t)) continue;
int nmask = mask | (1<<t);
ll nd2 = d + (w * (9 - t)) / 10;
if(nd2 < dist[v][nmask]){
dist[v][nmask] = nd2;
pq.push(T(nd2,v,nmask));
}
}
}
}
int Q; cin >> Q;
while(Q--){
int S; ll P[5];
cin >> S; S++; // shift
int avail=0;
for(int i=0;i<5;i++){
cin >> P[i];
if(P[i] != -1) avail |= (1<<i);
}
ll ans = INF;
for(int mask=0;mask<32;mask++){
if((mask & ~avail) != 0) continue;
ll base = dist[S][mask];
if(base >= INF) continue;
ll sumP=0;
for(int t=0;t<5;t++) if(mask&(1<<t)) sumP += P[t];
ans = min(ans, base + sumP);
}
if(ans>=INF) cout << -1 << "\n";
else cout << ans << "\n";
}
}
# | 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... |