Submission #1305359

#TimeUsernameProblemLanguageResultExecution timeMemory
1305359mayacValley (BOI19_valley)C++20
23 / 100
332 ms18840 KiB
#include <bits/stdc++.h> using namespace std; using ll=long long; const int maxn=(1e5)+1; vector<int> h(maxn); vector<vector<int>> jump(maxn,vector<int>(17,-1)); void initialize(){ for(int j=1;j<17;j++){ for(int i=0;i<maxn;i++){ if(jump[i][j-1]!=-1)jump[i][j]=jump[jump[i][j-1]][j-1]; } } } bool isf(int a,int b){ //cout<<a<<" "<<b<<"\n"; for(int i=16;i>0;i--){ if((1<<i)<=(h[a]-h[b])){ a=jump[a][i]; } } //cout<<a<<" "<<b<<"\n"; return (b==a)||(b==jump[a][0]); } int main(){ ll n,s,k,e,a,b,c; cin>>n>>s>>k>>e; vector<pair<int,int>> ed(n); vector<vector<int>> g(n+1); vector<int> v(s); for(int i=1;i<n;i++){ cin>>a>>b>>c; g[a].push_back(b); g[b].push_back(a); ed[i]={min(a,b),max(a,b)}; } for(int i=0;i<s;i++)cin>>v[i]; queue<int> q;h[e]=0; q.push(e); while(!q.empty()){ a=q.front();q.pop(); //cout<<a<<"\n"; for(int u:g[a]){ if(u!=jump[a][0]){ jump[u][0]=a; h[u]=h[a]+1; q.push(u); } } } initialize(); while(k--){ cin>>b>>a; if(isf(a,ed[b].first)&&isf(a,ed[b].second)){ cout<<"0\n"; }else{ cout<<"escaped\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...