Submission #672445

#TimeUsernameProblemLanguageResultExecution timeMemory
672445YENGOYANEvacuation plan (IZhO18_plan)C++17
23 / 100
491 ms35840 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;

int n, m, k, q;
vector<vector<pair<int, ll>>> gp;
vector<ll> g, mind;

void solve(){
    cin >> n >> m;
    gp = vector<vector<pair<int, ll>>> (n);
    mind = vector<ll> (n, 1e18);
    for(int i = 0; i < m; ++i){
        int u, v, w; cin >> u >> v >> w;
        gp[--u].push_back({--v, w});
        gp[v].push_back({u, w});
    }
    cin >> k;
    g = vector<ll> (k);
    priority_queue<pair<ll, int>, vector<pair<ll, int>>, greater<pair<ll, int>>> pq;
    for(int i = 0; i < k; ++i) cin >> g[i], --g[i], pq.push({0, g[i]}), mind[g[i]] = 0;
    while(pq.size()){
        pair<ll, int> p = pq.top();
        pq.pop();
        ll d = p.first, u = p.second;
        if(mind[u] < d) continue;
        for(pair<int, ll> v : gp[u]){
            if(mind[v.first] > mind[u] + v.second){
                mind[v.first] = mind[u] + v.second;
                pq.push({mind[v.first], v.first});
            }
        }
    }
    cin >> q;
    while(q--){
        int s, t; cin >> s >> t; --s, --t;
        cout << min(mind[s], mind[t]) << endl;
    }
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
//    int t; cin >> t; while(t--)
        solve();
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...