#include<bits/stdc++.h>
using namespace std;
int n,q;
int par[100005][21];
int st[100005],fin[100005],dep[100005];
vector<int> adj[100005],euler;
int bould[100005],mn[100005];
int root,tim = 0;
void pre_dfs(int u){
mn[u] = u;
vector<pair<int,int> > gg;
for(auto v:adj[u]){
pre_dfs(v);
gg.push_back({mn[v],v});
mn[u] = min(mn[u],mn[v]);
}
sort(gg.begin(),gg.end());
adj[u].clear();
for(auto x:gg){
adj[u].push_back(x.second);
}
}
void dfs(int u,int p,int d){
st[u] = tim;
dep[u] = d;
for(auto v:adj[u]){
if(v != p){
dfs(v,u,d+1);
}
}
fin[u] = tim++;
// cout << u << " " << st[u] << " " << fin[u] << endl;
euler.push_back(u);
}
signed main(){
cin >> n >> q;
for(int i = 1; i <= n; i ++){
cin >> par[i][0];
if(!par[i][0]){
par[i][0] = i;
root = i;
}
else{
adj[par[i][0]].push_back(i);
}
}
for(int j = 1; j <= 20; j ++){
for(int i = 1; i <= n; i ++){
par[i][j] = par[par[i][j-1]][j-1];
}
}
pre_dfs(root);
dfs(root,root,0);
set<int> s;
for(int i = 0; i < n; i ++) s.insert(i);
for(int i = 0; i < q; i++){
int t; cin >> t;
if(t == 1){
int x; cin >> x;
for(int j = 0; j < x-1; j ++){
bould[(*s.begin())] = 1;
s.erase(s.begin());
}
bould[(*s.begin())] = 1;
cout << euler[(*s.begin())] << "\n";
s.erase(s.begin());
}
else{
int u; cin >> u;
int u0 = u;
for(int j = 19; j >= 0; j --){
if(bould[fin[par[u][j]]]){
u = par[u][j];
}
}
bould[fin[u]] = 0;
s.insert(fin[u]);
cout << dep[u0]-dep[u] << "\n";
}
}
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
3 ms |
2796 KB |
Output is correct |
2 |
Correct |
435 ms |
15208 KB |
Output is correct |
3 |
Correct |
348 ms |
15132 KB |
Output is correct |
4 |
Correct |
3 ms |
2668 KB |
Output is correct |
5 |
Correct |
4 ms |
2796 KB |
Output is correct |
6 |
Correct |
6 ms |
2924 KB |
Output is correct |
7 |
Correct |
6 ms |
2924 KB |
Output is correct |
8 |
Correct |
7 ms |
2924 KB |
Output is correct |
9 |
Correct |
33 ms |
3436 KB |
Output is correct |
10 |
Correct |
85 ms |
5740 KB |
Output is correct |
11 |
Correct |
445 ms |
14960 KB |
Output is correct |
12 |
Correct |
341 ms |
14832 KB |
Output is correct |
13 |
Correct |
453 ms |
15088 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
248 ms |
9068 KB |
Output is correct |
2 |
Correct |
543 ms |
27752 KB |
Output is correct |
3 |
Correct |
374 ms |
20348 KB |
Output is correct |
4 |
Correct |
311 ms |
10860 KB |
Output is correct |
5 |
Correct |
353 ms |
10988 KB |
Output is correct |
6 |
Correct |
314 ms |
10860 KB |
Output is correct |
7 |
Correct |
307 ms |
9196 KB |
Output is correct |
8 |
Correct |
249 ms |
9068 KB |
Output is correct |
9 |
Correct |
492 ms |
28132 KB |
Output is correct |
10 |
Correct |
498 ms |
27544 KB |
Output is correct |
11 |
Correct |
472 ms |
27592 KB |
Output is correct |
12 |
Correct |
511 ms |
23976 KB |
Output is correct |
13 |
Correct |
410 ms |
31212 KB |
Output is correct |
14 |
Correct |
423 ms |
20188 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
241 ms |
15740 KB |
Output is correct |
2 |
Correct |
550 ms |
25060 KB |
Output is correct |
3 |
Correct |
346 ms |
28652 KB |
Output is correct |
4 |
Correct |
342 ms |
23012 KB |
Output is correct |
5 |
Correct |
364 ms |
22632 KB |
Output is correct |
6 |
Correct |
370 ms |
22504 KB |
Output is correct |
7 |
Correct |
341 ms |
20088 KB |
Output is correct |
8 |
Correct |
379 ms |
28652 KB |
Output is correct |
9 |
Correct |
545 ms |
28264 KB |
Output is correct |
10 |
Correct |
568 ms |
27948 KB |
Output is correct |
11 |
Correct |
551 ms |
27880 KB |
Output is correct |
12 |
Correct |
554 ms |
24804 KB |
Output is correct |
13 |
Correct |
582 ms |
35564 KB |
Output is correct |
14 |
Correct |
474 ms |
21084 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
563 ms |
28312 KB |
Output is correct |
2 |
Correct |
543 ms |
24788 KB |
Output is correct |
3 |
Correct |
439 ms |
34888 KB |
Output is correct |
4 |
Correct |
536 ms |
28260 KB |
Output is correct |
5 |
Correct |
542 ms |
27780 KB |
Output is correct |
6 |
Correct |
479 ms |
27496 KB |
Output is correct |
7 |
Correct |
556 ms |
24848 KB |
Output is correct |
8 |
Correct |
431 ms |
34796 KB |
Output is correct |
9 |
Correct |
378 ms |
20312 KB |
Output is correct |