Submission #1123947

#TimeUsernameProblemLanguageResultExecution timeMemory
1123947boris_7Evacuation plan (IZhO18_plan)C++20
22 / 100
4094 ms12356 KiB
#include<bits/stdc++.h>

using namespace std;
using ll = long long;

vector<vector<pair<int,int>>>gp;

void solve() {
    int n,m;
    cin>>n>>m;
    gp = vector<vector<pair<int,int>>>(n);
    for(int i = 0;i<m;i++){
        int u,v,w;
        cin>>u>>v>>w;
        --u,--v;
        gp[u].push_back({v,w});
        gp[v].push_back({u,w});
    }
    set<pair<int,int>>pq;
    vector<int>d(n,INT_MAX);
    int q;
    cin>>q;
    while(q--){
        int u;
        cin>>u;
        --u;
        pq.insert({0,u});
        d[u]=0;
    }
    while(pq.size()){
        int u = (*pq.begin()).second;
        int dist = (*pq.begin()).first;
        pq.erase(pq.begin());
        if(d[u]!=dist) continue;
        for(pair<int,int> &i:gp[u]){
            if(dist+i.second<d[i.first]){
                d[i.first]=dist+i.second;
                pq.insert({d[i.first],i.first});
            }
        }
    }
    cin>>q;
    while(q--){
        int u,v;
        cin>>u>>v;
        --u,--v;
        vector<int>dd(n,0);
        dd[u]=d[u];
        pq.insert({dd[u],u});
        while(pq.size()){
            int u = (*pq.begin()).second;
            int dist = (*pq.begin()).first;
            pq.erase(pq.begin());
            if(dd[u]!=dist) continue;
            for(pair<int,int> &i:gp[u]){
                if(min(dist,d[i.first])>dd[i.first]){
                    dd[i.first]=min(dist,d[i.first]);
                    pq.insert({dd[i.first],i.first});
                }
            }
        }
        cout<<dd[v]<<endl;
    }
}

signed main() {
    ios_base::sync_with_stdio(0);
    cin.tie(nullptr);
    // ll 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...