The constraints for the first question are relaxed enough for us to just run a Dijkstra for all the warehouses:
```
#include <bits/stdc++.h>
#define ll long long
#define IOS ios_base::sync_with_stdio(false);cin.tie(NULL)
using namespace std;
#define MOD 1e9 + 7
using pii = pair<ll, ll>;
vector<ll> dijkstra (vector<pii> adj[], ll src, ll n) {
vector<ll> dist(n, INT_MAX);
priority_queue<pii, vector<pii>, greater<pii>> pq;
pq.push({src, 0});
dist[src] = 0;
while (!pq.empty()) {
ll v = pq.top().first, d_v = pq.top().second;
pq.pop();
if (d_v > dist[v]) continue;
for (auto nbr : adj[v]) {
ll node = nbr.first, node_dist = nbr.second;
if (dist[node] > dist[v] + node_dist) {
dist[node] = dist[v] + node_dist;
pq.push({node, dist[node]});
}
}
}
return dist;
}
int main() {
IOS;
ll tt = 1;
// cin >> tt;
while (tt--) {
ll n, k, ans = INT_MAX; cin >> n >> k;
vector<ll> outlets(k, 0);
for (auto& val : outlets) cin >> val;
set<ll> s;
for (auto val : outlets) s.insert(val);
ll m; cin >> m;
vector<pii> adj[m];
for (ll itr = 0; itr < m; itr++) {
ll u, v, dist; cin >> u >> v >> dist;
adj[u].push_back({v, dist});
adj[v].push_back({u, dist});
}
for (auto& val : outlets) {
auto dist = dijkstra(adj, val, n);
for (ll itr = 0; itr < n; itr++) {
if (itr != val && s.find(itr) != s.end()) ans = min(ans, dist[itr]);
}
}
cout << ans << '\n';
}
return 0;
}
```