Submission #565592

#TimeUsernameProblemLanguageResultExecution timeMemory
565592MrDebooEvacuation plan (IZhO18_plan)C++17
54 / 100
4089 ms106204 KiB
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#define int long long
#define endl '\n'
using namespace std;
using namespace __gnu_pbds;
using ordered_set = tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update>;
signed main(){
    ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    int n,m;
    cin>>n>>m;
    vector<pair<int,int>>vct[n+1];
    map<int,bool>mp[n+1];
    while(m--){
        int u,v,w;
        cin>>u>>v>>w;
        mp[u][v]=1;
        mp[v][u]=1;
        vct[u].push_back({v,w});
        vct[v].push_back({u,w});
    }
    vector<int>dan(n+1,-1);
    priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>>pq;
    int k;
    cin>>k;
    while(k--){
        int x;
        cin>>x;
        pq.push({0,x});
    }
    while(pq.size()){
        int b=pq.top().first,a=pq.top().second;
        pq.pop();
        if(dan[a]!=-1)continue;
        dan[a]=b;
        for(auto &i:vct[a]){
            if(dan[i.first]==-1){
                pq.push({b+i.second,i.first});
            }
        }
    }
    int q;
    cin>>q;
    while(q--){
        int u,v;
        cin>>u>>v;
        if(mp[u][v]){cout<<min(dan[u],dan[v])<<endl;continue;}
        while(pq.size())pq.pop();
        vector<bool>vis(n+1);
        pq.push({-dan[u],u});
        while(pq.size()){
            int b=pq.top().first,a=pq.top().second;
            pq.pop();
            if(vis[a])continue;
            if(a==v){cout<<-b<<endl;break;}
            vis[a]=1;
            for(auto &i:vct[a]){
                if(!vis[i.first]){
                    pq.push({-min(dan[i.first],-b),i.first});
                }
            }
        }
    }
}
/*
9 12
1 9 4
1 2 5
2 3 7
2 4 3
4 3 6
3 6 4
8 7 10
6 7 5
5 8 1
9 5 7
5 4 12
6 8 2
2
4 7
5
1 6
5 3
4 8
5 8
1 5
*/
#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...