#pragma GCC("avx2")
#pragma GCC("unroll-loops","Ofast")
#pragma GCC("O3")
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define eb emplace_back
#define ppb pop_back
#define fi first
#define se second
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
typedef pair<int, int> pii;
typedef pair<ll, int> pli;
typedef pair<int, ll> pil;
typedef pair<ll, ll> pll;
typedef tuple<ll, int, int> tii;
const char nl = '\n';
const int mod = 1e9+7;
const ll inf = 1e18;
void solve(){
int n, m, k; cin >> n >> m >> k;
vector<int> t;
for (int i = 0; i < k; i++){
int x; cin >> x;
t.pb(x);
}
vector<vector<pil>> adj(n+1);
for (int i = 0; i < m; i++){
int u, v; cin >> u >> v;
ll w; cin >> w;
adj[v].pb({u, w});
}
int q; cin >> q;
if (k == 0){
while (q--){
int st; ll p1, p2, p3, p4, p5;
cin >> st >> p1 >> p2 >> p3 >> p4 >> p5;
cout << "-1\n";
}
return;
}
priority_queue<tii, vector<tii>, greater<tii>> pq;
vector<vector<ll>> dis(n+1, vector<ll> (32, inf));
for (int cur : t){
dis[cur][0] = 0;
pq.push({0, cur, 0});
}
while (pq.size()){
auto [cost, cur, mask] = pq.top();
pq.pop();
// cout << cost << ' ' << cur << ' ' << mask << nl;
if (dis[cur][mask] < cost) continue;
for (auto [ch, w] : adj[cur]){
ll nc = cost+w;
if (dis[ch][mask] > nc){
dis[ch][mask] = nc;
pq.push({nc, ch, mask});
}
for (int j = 0; j < 5; j++){
if (!((1 << j) & mask)){
int bit = mask|(1 << j);
ll nw = w-(w*((j+1)*10)/100);
nc = cost+nw;
// cout << nc << ' ' << ch << ' ' << bit << nl;
if (dis[ch][bit] > nc){
dis[ch][bit] = nc;
pq.push({nc, ch, bit});
}
}
}
}
}
while (q--){
int st; ll p[5];
cin >> st >> p[0] >> p[1] >> p[2] >> p[3] >> p[4];
ll ans = inf;
for (int i = 0; i < 32; i++){
ll ret = 0;
bool ok = 1;
for (int j = 0; j < 5; j++){
if ((1 << j) & i){
if (p[j] == -1){
ok = 0;
break;
} else ret += p[j];
}
}
if (ok){
ans = min(ans, dis[st][i]+ret);
}
}
cout << (ans == inf ? -1 : ans) << nl;
}
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
int t = 1; // cin >> t;
while (t--){
solve();
}
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... |