Submission #1327598

#TimeUsernameProblemLanguageResultExecution timeMemory
1327598gdshirpelengRoadside Advertisements (NOI17_roadsideadverts)C++20
0 / 100
1092 ms4640 KiB
#include <bits/stdc++.h>
using namespace std;
using ll=long long;
#define in insert
#define pb push_back

vector<pair<ll,ll>>graph[50001];
vector<ll>v(5);
vector<ll>dist;

void djikstra(ll v){
    priority_queue<pair<ll,ll>,vector<pair<ll,ll>>,greater<pair<ll,ll>>>pq;
    pq.push({0,v});
    dist[v]=0;
    pair<ll,ll>p;
    while(!pq.empty()){
        p=pq.top();
        pq.pop();
        ll node=p.second;
        for(pair<ll,ll> edge : graph[node]){
            ll to=edge.first;
            ll cost=edge.second;
            if(dist[node]+cost<dist[to]){
                dist[to]=dist[node]+cost;
                pq.push({dist[to],to});
            }
        }
    }
}

void solve(){
    ll n;
    cin>>n;
    ll u,s,w;
    for(int i=1;i<n;i++){
        cin>>u>>s>>w;
        graph[u].pb({s,w});
        graph[s].pb({u,w});
    }
    ll q;
    cin>>q;
    while(q--){
        ll ans=0;
        for(int i=0;i<5;i++){
            cin>>v[i];
        }
        dist.assign(n+1,LLONG_MAX);
        djikstra(v[0]);
        for(int i=0;i<=4;i++){
            ans=max(ans,dist[v[i]]);
        }
        cout<<ans<<'\n';
    }
}

int main(){
    solve();
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...