#include <bits/stdc++.h>
using namespace std;
const int N = 100*1000+5;
int par[N];
vector<int> g[N];
int depth[N];
int d[N][25];
int sub[N];
void dfs(int v,int p = 0){
depth[v] = depth[p]+1;
d[v][0] = par[v];
sub[v] = v;
for(int i = 0;i<g[v].size();i++){
int to = g[v][i];
if(to == p) continue;
dfs(to,v);
sub[v] = min(sub[v],sub[to]);
}
}
pair<int,int> lca(int u,int v){
bool f = false;
if(depth[u]>depth[v]){
swap(u,v);
f = true;
}
int dif = depth[v]-depth[u];
for(int i = 0;i<=20;i++){
if((dif>>i)&1) v = d[v][i];
}
// cout<<u<< " "<<v<<endl;
for(int i = 20;i>=0;i--){
if(d[u][i] == d[v][i]) continue;
u = d[u][i];
v = d[v][i];
}
if(f) swap(u,v);
return {u,v};
}
bool cmp(int u,int v){
pair<int,int> x = lca(u,v);
if(x.first == x.second) return depth[u]>depth[v];
return sub[x.first]<sub[x.second];
}
int hrt[N];
bool used[N];
int main(){
ios_base::sync_with_stdio(false);
int n,q;
cin>>n>>q;
for(int i = 1;i<=n;i++){
int x;
cin>>x;
if(!x) x = -1;
par[i] = x;
g[i].push_back(x);
g[x].push_back(i);
}
memset(d,-1,sizeof(d));
dfs(1);
for(int k = 1;k<=20;k++){
for(int i = 1;i<=n;i++){
if(d[i][k-1]!=-1){
d[i][k] = d[d[i][k-1]][k-1];
}
}
}
vector<int> all;
for(int i = 1;i<=n;i++) all.push_back(i);
sort(all.begin(),all.end(),cmp);
//for(int i = 0;i<all.size();i++) cout<<all[i]<<" ";
//cout<<endl;
set<pair<int,int> > ms;
for(int i = 0;i<all.size();i++){
ms.insert({i,all[i]});
hrt[all[i]] = i;
}
/*int x,y;
while(cin>>x>>y){
pair<int,int> w = lca(x,y);
cout<<w.first<<" "<<w.second<<endl;
}*/
while(q--){
int tp;
cin>>tp;
if(tp == 1){
int k;
cin>>k;
while(k--){
pair<int,int> x = *(ms.begin());
ms.erase(ms.begin());
used[x.second] = 1;
if(!k){
cout<<x.second<<endl;
}
}
}
else{
int x;
cin>>x;
int ans = 0;
/* while(used[x]){
int pr = par[x];
if(pr == -1 || !used[pr]){
ms.insert({hrt[x],x});
used[x] = 0;
break;
}
ans++;
x = par[x];
}*/
used[x] = 0;
ms.insert({hrt[x],x});
cout<<ans<<endl;
}
}
return 0;
}
Compilation message
ballmachine.cpp: In function 'void dfs(int, int)':
ballmachine.cpp:13:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i = 0;i<g[v].size();i++){
~^~~~~~~~~~~~
ballmachine.cpp: In function 'int main()':
ballmachine.cpp:73:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
for(int i = 0;i<all.size();i++){
~^~~~~~~~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Execution timed out |
1090 ms |
12536 KB |
Time limit exceeded |
2 |
Execution timed out |
1077 ms |
19784 KB |
Time limit exceeded |
3 |
Correct |
588 ms |
20032 KB |
Output is correct |
4 |
Execution timed out |
1080 ms |
12536 KB |
Time limit exceeded |
5 |
Execution timed out |
1078 ms |
12536 KB |
Time limit exceeded |
6 |
Incorrect |
16 ms |
12664 KB |
Output isn't correct |
7 |
Execution timed out |
1068 ms |
12536 KB |
Time limit exceeded |
8 |
Incorrect |
19 ms |
12664 KB |
Output isn't correct |
9 |
Execution timed out |
1080 ms |
12920 KB |
Time limit exceeded |
10 |
Execution timed out |
1087 ms |
14460 KB |
Time limit exceeded |
11 |
Execution timed out |
1081 ms |
19828 KB |
Time limit exceeded |
12 |
Correct |
587 ms |
20080 KB |
Output is correct |
13 |
Incorrect |
613 ms |
19844 KB |
Output isn't correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
321 ms |
16168 KB |
Output isn't correct |
2 |
Execution timed out |
1028 ms |
25372 KB |
Time limit exceeded |
3 |
Incorrect |
840 ms |
23380 KB |
Output isn't correct |
4 |
Incorrect |
418 ms |
17272 KB |
Output isn't correct |
5 |
Execution timed out |
1071 ms |
16632 KB |
Time limit exceeded |
6 |
Incorrect |
420 ms |
17144 KB |
Output isn't correct |
7 |
Execution timed out |
1076 ms |
16700 KB |
Time limit exceeded |
8 |
Incorrect |
321 ms |
16120 KB |
Output isn't correct |
9 |
Incorrect |
872 ms |
26484 KB |
Output isn't correct |
10 |
Incorrect |
993 ms |
25256 KB |
Output isn't correct |
11 |
Execution timed out |
1010 ms |
25420 KB |
Time limit exceeded |
12 |
Incorrect |
896 ms |
25584 KB |
Output isn't correct |
13 |
Incorrect |
941 ms |
26356 KB |
Output isn't correct |
14 |
Incorrect |
759 ms |
23408 KB |
Output isn't correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Incorrect |
410 ms |
19448 KB |
Output isn't correct |
2 |
Incorrect |
964 ms |
25844 KB |
Output isn't correct |
3 |
Incorrect |
793 ms |
25184 KB |
Output isn't correct |
4 |
Incorrect |
632 ms |
24048 KB |
Output isn't correct |
5 |
Incorrect |
668 ms |
23156 KB |
Output isn't correct |
6 |
Incorrect |
644 ms |
23924 KB |
Output isn't correct |
7 |
Incorrect |
645 ms |
23104 KB |
Output isn't correct |
8 |
Incorrect |
773 ms |
25204 KB |
Output isn't correct |
9 |
Incorrect |
910 ms |
27188 KB |
Output isn't correct |
10 |
Incorrect |
995 ms |
25844 KB |
Output isn't correct |
11 |
Execution timed out |
1085 ms |
26484 KB |
Time limit exceeded |
12 |
Incorrect |
971 ms |
25844 KB |
Output isn't correct |
13 |
Execution timed out |
1079 ms |
28908 KB |
Time limit exceeded |
14 |
Incorrect |
821 ms |
23608 KB |
Output isn't correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Execution timed out |
1075 ms |
26916 KB |
Time limit exceeded |
2 |
Incorrect |
938 ms |
25592 KB |
Output isn't correct |
3 |
Incorrect |
933 ms |
28016 KB |
Output isn't correct |
4 |
Execution timed out |
1081 ms |
26996 KB |
Time limit exceeded |
5 |
Execution timed out |
1042 ms |
25172 KB |
Time limit exceeded |
6 |
Incorrect |
939 ms |
25716 KB |
Output isn't correct |
7 |
Incorrect |
942 ms |
25460 KB |
Output isn't correct |
8 |
Incorrect |
958 ms |
28100 KB |
Output isn't correct |
9 |
Incorrect |
747 ms |
23664 KB |
Output isn't correct |