제출 #847070

#제출 시각아이디문제언어결과실행 시간메모리
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...