#include <bits/stdc++.h>
using namespace std;
#define N 100000
vector<unsigned> g[N], anc[N];
unsigned min_child[N], postorder[N];
bitset<N> has_ball;
unsigned calc_min_child(unsigned u)
{
min_child[u] = u;
for (unsigned const &v : g[u])
min_child[u] = min(min_child[u], calc_min_child(v));
return min_child[u];
}
unsigned traverse(unsigned u, vector<unsigned> &path, unsigned i = 0)
{
for (size_t j = 1; j <= path.size(); j <<= 1)
anc[u].push_back(path[path.size() - j]);
path.push_back(u);
for (unsigned const &v : g[u])
i = traverse(v, path, i);
path.pop_back();
postorder[u] = i++;
return i;
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
size_t n, q;
cin >> n >> q;
unsigned r;
for (size_t i = 0; i < n; i++)
{
unsigned p;
cin >> p;
if (!p)
r = i;
else
g[p - 1].push_back(i);
}
calc_min_child(r);
for (size_t i = 0; i < n; i++)
sort(g[i].begin(), g[i].end(), [&](unsigned a, unsigned b)
{ return min_child[a] < min_child[b]; });
vector<unsigned> path;
traverse(r, path);
priority_queue<pair<unsigned, unsigned>> qu;
for (unsigned i = 0; i < n; i++)
qu.emplace(n - postorder[i], i);
while (q--)
{
unsigned t, x;
cin >> t >> x;
if (t == 1)
{
for (size_t i = 0; i < x; i++)
{
if (i + 1 == x)
cout << qu.top().second + 1 << '\n';
has_ball[qu.top().second] = 1;
qu.pop();
}
}
else
{
x--;
unsigned h = 0;
for (size_t i = anc[x].size() - 1; i < anc[x].size(); i--)
if (has_ball[anc[x][i]])
x = anc[x][i], h += (1U << i);
has_ball[x] = 0;
qu.emplace(n - postorder[x], x);
cout << h << '\n';
}
}
}
Compilation message
ballmachine.cpp: In function 'int main()':
ballmachine.cpp:57:13: warning: 'r' may be used uninitialized in this function [-Wmaybe-uninitialized]
57 | traverse(r, path);
| ~~~~~~~~^~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
2 ms |
4948 KB |
Output is correct |
2 |
Correct |
71 ms |
9436 KB |
Output is correct |
3 |
Correct |
48 ms |
9616 KB |
Output is correct |
4 |
Correct |
4 ms |
4948 KB |
Output is correct |
5 |
Correct |
3 ms |
4948 KB |
Output is correct |
6 |
Correct |
3 ms |
5076 KB |
Output is correct |
7 |
Incorrect |
3 ms |
5076 KB |
Output isn't correct |
8 |
Correct |
3 ms |
5076 KB |
Output is correct |
9 |
Incorrect |
6 ms |
5332 KB |
Output isn't correct |
10 |
Incorrect |
16 ms |
6232 KB |
Output isn't correct |
11 |
Correct |
66 ms |
9452 KB |
Output is correct |
12 |
Correct |
49 ms |
9660 KB |
Output is correct |
13 |
Correct |
63 ms |
9380 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
32 ms |
8892 KB |
Output is correct |
2 |
Correct |
108 ms |
20060 KB |
Output is correct |
3 |
Correct |
55 ms |
11360 KB |
Output is correct |
4 |
Correct |
43 ms |
9080 KB |
Output is correct |
5 |
Correct |
47 ms |
9672 KB |
Output is correct |
6 |
Correct |
47 ms |
9632 KB |
Output is correct |
7 |
Correct |
44 ms |
8784 KB |
Output is correct |
8 |
Correct |
36 ms |
8884 KB |
Output is correct |
9 |
Correct |
100 ms |
18292 KB |
Output is correct |
10 |
Correct |
127 ms |
20140 KB |
Output is correct |
11 |
Correct |
109 ms |
20104 KB |
Output is correct |
12 |
Correct |
117 ms |
18052 KB |
Output is correct |
13 |
Correct |
94 ms |
23836 KB |
Output is correct |
14 |
Correct |
57 ms |
11388 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
59 ms |
11688 KB |
Output isn't correct |
2 |
Incorrect |
141 ms |
18368 KB |
Output isn't correct |
3 |
Correct |
113 ms |
21704 KB |
Output is correct |
4 |
Incorrect |
78 ms |
15692 KB |
Output isn't correct |
5 |
Correct |
84 ms |
17348 KB |
Output is correct |
6 |
Correct |
101 ms |
17352 KB |
Output is correct |
7 |
Incorrect |
94 ms |
15884 KB |
Output isn't correct |
8 |
Correct |
104 ms |
21796 KB |
Output is correct |
9 |
Incorrect |
116 ms |
18180 KB |
Output isn't correct |
10 |
Incorrect |
139 ms |
20236 KB |
Output isn't correct |
11 |
Incorrect |
130 ms |
20224 KB |
Output isn't correct |
12 |
Incorrect |
124 ms |
18376 KB |
Output isn't correct |
13 |
Incorrect |
170 ms |
26964 KB |
Output isn't correct |
14 |
Correct |
104 ms |
11448 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
122 ms |
18356 KB |
Output isn't correct |
2 |
Incorrect |
128 ms |
18468 KB |
Output isn't correct |
3 |
Correct |
108 ms |
26860 KB |
Output is correct |
4 |
Incorrect |
117 ms |
18332 KB |
Output isn't correct |
5 |
Correct |
127 ms |
20300 KB |
Output is correct |
6 |
Correct |
105 ms |
20164 KB |
Output is correct |
7 |
Incorrect |
118 ms |
18404 KB |
Output isn't correct |
8 |
Correct |
103 ms |
26860 KB |
Output is correct |
9 |
Correct |
66 ms |
11412 KB |
Output is correct |