#include <bits/stdc++.h>
using namespace std;
#ifdef LOCAL
#include "debug.h"
#else
#define debug(...) 42
#endif
#define ll long long
#define ld long double
#define pii pair<int,int>
#define all(x) (x).begin(), (x).end()
#define isz(x) (int)(x.size())
const int MXN = 5e5+10, inf = 1e9;
const ll mod = 998244353, INF = 1e18;
vector<pii> g[MXN];
int a[MXN];
ll dis[MXN];
int n, m, k;
void Multidjk() {
priority_queue<pii, vector<pii>, greater<pii>> pq;
for (int i = 1; i <= n; i++) dis[i] = INF;
for (int i = 1; i <= k; i++) {
pq.push({0, a[i]});
dis[a[i]] = 0LL;
}
while (!pq.empty()) {
auto [d_u, u] = pq.top();
pq.pop();
if (d_u != dis[u]) continue;
for (auto &[v, w] : g[u]) {
if (dis[v] > dis[u] + w) {
dis[v] = dis[u] + w;
pq.push({dis[v], v});
}
}
}
}
int djk(int s, int f) {
vector<ll> d(n+1, -1);
d[s] = dis[s];
priority_queue<pair<ll, ll>> pq;
pq.push({d[s], s});
while (!pq.empty()) {
auto [d_u, u] = pq.top();
pq.pop();
if (d_u != d[u]) continue;
for (auto &[v, w] : g[u]) {
ll cur = min(d_u, dis[v]);
if (cur > d[v]) {
d[v] = cur;
pq.push({d[v], v});
}
}
}
return d[f];
}
signed main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
#ifdef LOCAL
freopen("in.txt", "r", stdin);
// freopen("out.txt", "w", stdout);
freopen("err.log", "w", stderr);
#endif
cin >> n >> m;
for (int i = 1; i <= m; i++) {
int u, v, w; cin >> u >> v >> w;
g[u].push_back({v, w});
g[v].push_back({u, w});
}
cin >> k;
for (int i = 1; i <= k; i++) cin >> a[i];
Multidjk();
int q; cin >> q;
while (q--) {
int s, t; cin >> s >> t;
bool ok = false;
for (auto &[v, w] : g[s])
ok |= (v == t);
if (ok) {
cout << min(dis[s], dis[t]) << '\n';
continue;
}
cout << djk(s, t) << '\n';
}
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... |