Submission #1022471

#TimeUsernameProblemLanguageResultExecution timeMemory
1022471m5588ohammedValley (BOI19_valley)C++14
0 / 100
91 ms31936 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define endl "\n"
int n,S,E,q,U,V,x,l,mn,flag,y;
vector <array<int,2>> v[100001],edges;
priority_queue <array<int,2>> qu;
int shops[100001],t[100001][19],level[100001],close[100001],dis[100001];
array <int,2> parent(int i,int last,int cnt){
    t[i][0]=last;
    level[i]=level[last]+1;
    dis[i]=cnt;

    int ans=1e15,ind=0;
    for(auto [j,w]:v[i]){
        if(j!=last){
            auto a=parent(j,i,cnt+w);
            if(ans>=a[0]+w){
                ind=a[1];
                ans=a[0]+w;
            }
        }
    }
    if(shops[i]==1){
        close[i]=i;
        return {0,i};
    }
    close[i]=ind;
    return {ans,ind};
}
int lca(int a,int b){
    int la=level[a],lb=level[b],k;
    if(la<lb){
        swap(a,b);
        swap(la,lb);
    }
    k=la-lb;
    for(int i=18;i>=0;i--){
        if(k-(1<<i)>=0){
            k-=(1<<i);
            a=t[a][i];
        }
    }
    if(a==b) return a;
    for(int i=18;i>=0;i--){
        if(t[a][i]!=t[b][i]){
            a=t[a][i];
            b=t[b][i];
        }
    }
    return t[a][0];
}
void calc2(){
    parent(E,0,0);
    for(int k=1;k<=18;k++){
        for(int i=1;i<=n;i++) t[i][k]=t[t[i][k-1]][k-1];
    }
    while(q--){
        cin>>l>>x;
        if(level[edges[l-1][0]]>level[edges[l-1][1]]) y=edges[l-1][0];
        else y=edges[l-1][1];
        if(lca(y,x)!=y) cout<<"escaped"<<endl;
        else{
            if(close[y]==0) cout<<"oo"<<endl;
            else{
                int b=lca(close[y],x);
                if(close[y]==b) cout<<dis[x]-dis[close[y]]<<endl;
                else if(x==b) cout<<dis[close[y]]-dis[x]<<endl;
                else cout<<dis[close[y]]+dis[x]-(dis[y]*2)<<endl;
            }
        }
    }
}
signed main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    cin>>n>>S>>q>>E;
    for(int i=0;i<n-1;i++){
        int a,b,c;
        cin>>a>>b>>c;
        v[a].push_back({b,c});
        v[b].push_back({a,c});
        edges.push_back({a,b});
    }
    for(int i=0;i<S;i++){
        int a;
        cin>>a;
        shops[a]=1;
    }
    calc2();
    return 0;
}

Compilation message (stderr)

valley.cpp: In function 'std::array<long long int, 2> parent(long long int, long long int, long long int)':
valley.cpp:15:14: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   15 |     for(auto [j,w]:v[i]){
      |              ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...