Submission #847070

#TimeUsernameProblemLanguageResultExecution timeMemory
847070irmuunValley (BOI19_valley)C++17
23 / 100
83 ms23792 KiB
#include<bits/stdc++.h>
 
using namespace std;
 
#define ll long long
#define pb push_back
#define ff first
#define ss second
#define all(s) s.begin(),s.end()
#define rall(s) s.rbegin(),s.rend()

int main(){
    ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
    ll n,s,q,e;
    cin>>n>>s>>q>>e;
    ll u[n],v[n],w[n];
    vector<pair<ll,ll>>adj[n+1];
    for(ll i=1;i<n;i++){
        cin>>u[i]>>v[i]>>w[i];
        adj[u[i]].pb({v[i],w[i]});
        adj[v[i]].pb({u[i],w[i]});
    }
    bool shop[n+1];
    fill(shop,shop+n+1,0);
    for(ll i=1;i<=s;i++){
        ll c;
        cin>>c;
        shop[c]=true;
    }
    ll cur=0;
    ll ord[n+1][2],cnt[n+1],par[n+1];
    par[e]=0;
    function <void(ll,ll)> dfs=[&](ll x,ll p){
        cnt[x]=(shop[x]);
        ord[x][0]=++cur;
        for(auto [y,w]:adj[x]){
            if(y!=p){
                par[y]=x;
                dfs(y,x);
                cnt[x]+=cnt[y];
            }
        }
        ord[x][1]=++cur;
    };
    function <bool(ll,ll)> check=[&](ll i,ll j){
        if(ord[i][0]<=ord[j][0]&&ord[j][1]<=ord[i][1]){
            return false;
        }
        return true;
    };
    dfs(e,0);
    while(q--){
        ll i,r;
        cin>>i>>r;
        ll low=u[i];
        if(par[v[i]]==u[i]){
            low=v[i];
        }
        if(check(low,r)){
            cout<<"escaped\n";
            continue;
        }
        if(cnt[low]==0){
            cout<<"oo\n";
            continue;
        }
        cout<<0<<"\n";
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...