#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pll pair<ll, ll>
#define pii pair<int, int>
#define fs first
#define sc second
#define pb push_back
const int maxn=1e5;
vector<pii> adj[maxn+1];
int par[maxn+1],ls,ans[maxn+1];
bool en[maxn+1];
set<int> s[maxn+1];
int rep(int x){
    if(x==par[x])return x;
    return par[x]=rep(par[x]);
}
void join(int x,int y){
    x=rep(x);y=rep(y);
    if(x==y)return;
    if(s[x]>s[y])swap(x,y);
    par[x]=y;
    for(int i:s[x]){
        if(s[y].count(i)){
            ans[i]=ls;
            s[y].erase(i);
        }else s[y].insert(i);
    }
    s[x].clear();
}
void solve() {
    int n,m;
    cin>>n>>m;
    while(m--){
        int u,v,w;
        cin>>u>>v>>w;
        adj[u].pb({v,w});
        adj[v].pb({u,w});
    }
    bool vis[n+1];
    pii d[n+1];
    priority_queue<pii> pq;
    for(int i=1;i<=n;i++){
        d[i]={1e9,i};
        vis[i]=0;
    }
    int k;
    cin>>k;
    while(k--){
        int x;
        cin>>x;
        d[x].fs=0;
        pq.push({0,x});
    }
    while(!pq.empty()){
        int v=pq.top().sc;
        pq.pop();
        if(vis[v])continue;
        vis[v]=1;
        for(auto[u,w]:adj[v])if(!vis[u]){
            d[u].fs=min(d[u].fs,d[v].fs+w);
            pq.push({-d[u].fs,u});
        }
    }
    int q;
    cin>>q;
    for(int i=0;i<q;i++){
        int u,v;
        cin>>u>>v;
        s[u].insert(i);
        s[v].insert(i);
    }
    iota(par+1,par+n+1,1);
    sort(d+1,d+n+1);
    reverse(d+1,d+n+1);
    for(int i=1;i<=n;i++){
        auto[ds,v]=d[i];
        ls=ds;
        en[v]=1;
        for(auto[u,w]:adj[v])if(en[u])join(u,v);
    }
    for(int i=0;i<q;i++)cout<<ans[i]<<'\n';
}
int main() {
    #ifdef FPO
        freopen("in","r",stdin);
        freopen("out","w",stdout);
    #endif
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    solve();
}
| # | 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... |