#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll nx = 5e3+5, inf = 4e18;
ll n,e,k,q,t[nx],p[6],dist[nx][1<<5][1<<5];
vector<pair<ll,ll>> adj[nx]; priority_queue<tuple<ll,ll,ll,ll>, vector<tuple<ll,ll,ll,ll>>, greater<tuple<ll,ll,ll,ll>>> pq;
ll Dijkstra(ll p[])
{
for(int i = 0; i < n; i++) for(int j = 0; j < 32; j++) for(int k = 0; k < 32; k++) dist[i][j][k] = inf;
while(!pq.empty()) pq.pop();
int start = p[0];
if(start < 0) return -1;
for(int i = 0; i < (1<<5); i++)
{
ll cost = 0;
bool valid = true;
for(int j = 0; j < 5; j++)
{
if(i & (1<<j)) cost += p[j+1];
else continue;
if(p[j+1] == -1) valid = false;
}
dist[start][i][0] = cost;
if(valid) pq.push({cost, start, i, 0});
}
while(!pq.empty())
{
auto [d, u, state, cur] = pq.top();
pq.pop();
if(d > dist[u][state][cur]) continue;
for(auto [v, w] : adj[u])
{
if(w != inf && d + w < dist[v][state][cur])
{
dist[v][state][cur] = d+w;
pq.push({dist[v][state][cur], v, state, cur});
}
if(state == cur) continue;
for(int i = 1; i <= 5; i++)
{
if(!(1<<(i-1) & state) || (1<<(i-1) & cur)) continue;
ll nw = cur | (1<<(i-1));
if(w != inf && d + w*(10-i)/10 < dist[v][state][nw])
{
dist[v][state][nw] = d + w*(10-i)/10;
pq.push({dist[v][state][nw], v, state, nw});
}
}
}
}
ll res = inf;
for(int i = 0; i < (1<<5); i++)
{
for(int j = 0; j < k; j++)
{
res = min(res, dist[t[j]][i][i]);
}
}
return (res == inf ? -1 : res);
}
int main()
{
ios::sync_with_stdio(false); cin.tie(0);
cin>>n>>e>>k;
for(int i = 0; i < k; i++) cin>>t[i];
for(int i = 0; i < e; i++)
{
ll u,v,w; cin>>u>>v>>w;
adj[u].push_back({v,w});
}
cin>>q;
for(int i = 0; i < q; i++)
{
cin>>p[0]>>p[1]>>p[2]>>p[3]>>p[4]>>p[5];
cout<<Dijkstra(p)<<"\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... |