#include<bits/stdc++.h>
using namespace std;
#define IOS cin.tie(nullptr)->sync_with_stdio(0),cin.exceptions(cin.failbit);
#define lb(x) (x)&-(x)
#define all(x) (x).begin(),(x).end()
#define ll long long
constexpr int maxN=5e3+5,maxMASK = 1<<5;
int n,m,k,q;
ll dis[maxMASK][maxN];
vector<pair<int,ll>> adj[maxN];
int main(){
IOS
cin>>n>>m>>k;
for(int i = 0;i<maxMASK;i++)fill(dis[i],dis[i]+n+1,1e18);
priority_queue<pair<ll,pair<int,int>>,vector<pair<ll,pair<int,int>>>,greater<pair<ll,pair<int,int>>>> pq;
for(int i = 0;i<k;i++){
int v;cin>>v;
pq.emplace(dis[0][v] = 0,make_pair(v,0));
}
for(int i = 0;i<m;i++){
int a,b,c;
cin>>a>>b>>c;
adj[b].emplace_back(a,c);
}
for(;!pq.empty();){
auto [d,p] = pq.top();
auto [u,mask] = p;
pq.pop();
if(d!=dis[mask][u])continue;
for(auto [v,c]:adj[u]){
if(dis[mask][v]>d+c)
pq.emplace(dis[mask][v] = d+c,make_pair(v,mask));
for(int cp = 0;cp<5;cp++)if((mask>>cp&1)==0){
int nmask = mask^(1<<cp);
if(dis[nmask][v]>d+c/10*(10-cp-1))
pq.emplace(dis[nmask][v] = d+c/10*(10-cp-1),make_pair(v,nmask));
}
}
}
cin>>q;
for(ll s,p[5];q--;){
cin>>s;
for(int i = 0;i<5;i++)cin>>p[i];
ll ans = 1e18;
for(int i = 0;i<maxMASK;i++){
ll cost = dis[i][s];
for(int j = 0;j<5;j++){
if(p[j]==-1&&(i>>j&1))cost = 1e18;
if(i>>j&1)cost+=p[j];
}
ans = min(ans,cost);
}
if(ans>=1e18)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... |