#include <bits/stdc++.h>
#include "factories.h"
#define pb push_back
#define fi first
#define se second
#define pii pair<ll,ll>
#define ll long long
using namespace std;
const int NN=5e5+5;
ll n;
vector<pair<ll, ll>> kaimini[NN];
void Init(int N, int A[], int B[], int D[]) {
n=N;
for(int i=0; i<N; i++){
kaimini[A[i]].pb({B[i], D[i]});
kaimini[B[i]].pb({A[i], D[i]});
}
}
long long Query(int S, int X[], int T, int Y[]) {
ll atb=LONG_LONG_MAX;
vector<ll> dist(n+1, LONG_LONG_MAX);
priority_queue<pii, vector<pii>, greater<pii>> pq;
for(ll i=0; i<S; i++){
pq.push({0, X[i]});
}
while(!pq.empty()){
ll u=pq.top().se, d=pq.top().fi;
pq.pop();
if(dist[u]<=d)
continue;
dist[u]=d;
for(auto x : kaimini[u])
pq.push({d+x.se, x.fi});
}
for(int i=0; i<T; i++){
atb=min(atb, dist[Y[i]]);
}
return atb;
}