This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#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 (stderr)
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);
| ~~~~~~~~^~~~~~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |