제출 #963409

#제출 시각아이디문제언어결과실행 시간메모리
963409pccBall Machine (BOI13_ballmachine)C++17
7.54 / 100
1091 ms28104 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define pll pair<ll,ll> #define pii pair<int,int> #define fs first #define sc second #define tlll tuple<ll,ll,ll> const int mxn = 1e5+10; vector<int> tree[mxn]; vector<int> eul; int par[mxn][20],dep[mxn]; int N,Q; int rt; int dp[mxn]; int dfn[mxn]; set<int> st; void dfs(int now){ for(int i = 1;i<20;i++)par[now][i] = par[par[now][i-1]][i-1]; sort(tree[now].begin(),tree[now].end()); for(auto nxt:tree[now]){ dep[nxt] = dep[now]+1; dfs(nxt); } dfn[now] = eul.size(); eul.push_back(now); return; } int main(){ ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); cin>>N>>Q; for(int i = 1;i<=N;i++){ int p; cin>>p; par[i][0] = p; tree[p].push_back(i); if(!p)rt = i; } par[rt][0] = rt; dfs(rt); for(int i = 0;i<N;i++)st.insert(i); while(Q--){ int t,k; cin>>t>>k; int lst = 0; if(t == 1){ while(k--){ lst = *st.begin(); st.erase(st.begin()); dp[lst] = 1; } cout<<eul[lst]<<'\n'; } else{ lst = k; for(int i = 19;i>=0;i--){ if(dp[par[lst][i]])lst = par[lst][i]; } dp[lst] = 0; st.insert(dfn[lst]); cout<<dep[k]-dep[lst]<<'\n'; } } 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...